ソースを参照

删除无用代码,并且将文件相关操作的代码适配至Android 12

hy 3 年 前
コミット
d7ea28348c
共有43 個のファイルを変更した1445 個の追加2588 個の削除を含む
  1. 1 1
      app/build.gradle
  2. 18 15
      app/src/main/AndroidManifest.xml
  3. 4 42
      app/src/main/java/com/electric/chargingpile/activity/AboutActivity.java
  4. 6 5
      app/src/main/java/com/electric/chargingpile/activity/AdinShowActivity.java
  5. 45 180
      app/src/main/java/com/electric/chargingpile/activity/AlterOneActivity.java
  6. 47 21
      app/src/main/java/com/electric/chargingpile/activity/CarOwnerCertificateActivity.java
  7. 50 160
      app/src/main/java/com/electric/chargingpile/activity/ChargingCommentActivity.java
  8. 3 67
      app/src/main/java/com/electric/chargingpile/activity/ClaimDataActivity.java
  9. 96 78
      app/src/main/java/com/electric/chargingpile/activity/ClaimSurveyTwoActivity.java
  10. 7 26
      app/src/main/java/com/electric/chargingpile/activity/CompletePhotoActivity.java
  11. 58 23
      app/src/main/java/com/electric/chargingpile/activity/EditAnswerActivity.java
  12. 63 22
      app/src/main/java/com/electric/chargingpile/activity/EditQuestionTwoActivity.java
  13. 53 168
      app/src/main/java/com/electric/chargingpile/activity/FeedbackActivity.java
  14. 5 10
      app/src/main/java/com/electric/chargingpile/activity/FindActivity.java
  15. 21 18
      app/src/main/java/com/electric/chargingpile/activity/H5Activity.java
  16. 21 19
      app/src/main/java/com/electric/chargingpile/activity/HomeWebActivity.java
  17. 9 6
      app/src/main/java/com/electric/chargingpile/activity/HotInfoActivity.java
  18. 155 72
      app/src/main/java/com/electric/chargingpile/activity/MainMapActivity.java
  19. 5 48
      app/src/main/java/com/electric/chargingpile/activity/MyWebViewActivity.java
  20. 2 2
      app/src/main/java/com/electric/chargingpile/activity/NewSelectCityActivity.java
  21. 57 218
      app/src/main/java/com/electric/chargingpile/activity/PrivateZhuangInfoActivity.java
  22. 2 0
      app/src/main/java/com/electric/chargingpile/activity/PublishItemsActivity.java
  23. 69 120
      app/src/main/java/com/electric/chargingpile/activity/PublishPicTopicActivity.java
  24. 5 5
      app/src/main/java/com/electric/chargingpile/activity/PublishVideoTopicActivity.java
  25. 0 135
      app/src/main/java/com/electric/chargingpile/activity/QRChargingActivity.java
  26. 31 10
      app/src/main/java/com/electric/chargingpile/activity/RoutePlanMapActivity.java
  27. 58 160
      app/src/main/java/com/electric/chargingpile/activity/ShareTwoActivity.java
  28. 63 133
      app/src/main/java/com/electric/chargingpile/activity/ShareTwoEditActivity.java
  29. 96 45
      app/src/main/java/com/electric/chargingpile/activity/SkipUserInfoActivity.java
  30. 0 72
      app/src/main/java/com/electric/chargingpile/activity/TestProgressActivity.java
  31. 0 18
      app/src/main/java/com/electric/chargingpile/activity/TesttActivity.java
  32. 5 7
      app/src/main/java/com/electric/chargingpile/activity/UserCenterActivity.java
  33. 91 82
      app/src/main/java/com/electric/chargingpile/activity/UserInfoActivity.java
  34. 2 31
      app/src/main/java/com/electric/chargingpile/activity/WelcomeActivity.java
  35. 52 151
      app/src/main/java/com/electric/chargingpile/activity/ZhanCommentActivity.java
  36. 6 55
      app/src/main/java/com/electric/chargingpile/activity/ZoomingPhotoTextActivity.java
  37. 4 4
      app/src/main/java/com/electric/chargingpile/application/MainApplication.java
  38. 0 23
      app/src/main/java/com/electric/chargingpile/fragment/YueFragment.java
  39. 0 304
      app/src/main/java/com/electric/chargingpile/fragment/ZoomingPhotoTextFragment.java
  40. 152 0
      app/src/main/java/com/electric/chargingpile/util/DownloadUtil.java
  41. 0 32
      app/src/main/java/com/electric/chargingpile/util/ImageTools.java
  42. 82 0
      app/src/main/java/com/electric/chargingpile/util/PhotoUtils.java
  43. 1 0
      app/src/main/res/xml/provider_paths.xml

+ 1 - 1
app/build.gradle

@ -205,7 +205,7 @@ dependencies {
205 205
    // 停更过期库,用zhihu/Matisse
206 206
//    implementation 'me.iwf.photopicker:PhotoPicker:0.9.12@aar'
207 207
    // 为了兼容Android10 使用beta版本
208
    implementation 'com.zhihu.android:matisse:0.5.3-beta3'
208
//    implementation 'com.zhihu.android:matisse:0.5.3-beta3'
209 209
    implementation 'top.zibin:Luban:1.1.8'
210 210
    implementation 'com.ms-square:expandableTextView:0.1.4'
211 211
    implementation 'io.reactivex.rxjava2:rxjava:2.0.5'

+ 18 - 15
app/src/main/AndroidManifest.xml

@ -16,7 +16,6 @@
16 16
<!--        android:name="${applicationId}.permission.JPUSH_MESSAGE"-->
17 17
<!--        android:protectionLevel="signature" />-->
18 18
19
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <!-- 往SDCard写入数据权限 -->
20 19
21 20
    <uses-feature android:name="android.hardware.camera" />
22 21
    <uses-feature android:name="android.hardware.camera.autofocus" />
@ -48,19 +47,31 @@
48 47
    <uses-permission android:name="android.permission.INTERNET" />
49 48
    <uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />
50 49
    <uses-permission android:name="android.permission.RECEIVE_USER_PRESENT" />
51
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
50
52 51
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <!-- 极光 -->
53 52
    <uses-permission android:name="android.permission.VIBRATE" />
54 53
    <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
55
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
54
56 55
    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
57
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <!-- 【常用】 信鸽SDK所需权限 -->
58 56
    <uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" />
59 57
    <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
60 58
    <uses-permission android:name="android.permission.REORDER_TASKS" />
61 59
    <uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" />
62
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <!-- 权限 : AGPS定位 -->
63
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
60
61
    <!--适配Android R包可见性 开始-->
62
    <queries package="${applicationId}">
63
        <intent>
64
            <action android:name="android.media.action.IMAGE_CAPTURE">
65
66
            </action>
67
        </intent>
68
        <intent>
69
            <action android:name="android.media.action.ACTION_VIDEO_CAPTURE">
70
71
            </action>
72
        </intent>
73
    </queries>
74
    <!--适配Android R包可见性 结束-->
64 75
65 76
    <application
66 77
        android:name=".application.MainApplication"
@ -122,6 +133,7 @@
122 133
            android:screenOrientation="portrait"
123 134
            android:windowSoftInputMode="stateHidden|adjustUnspecified" />
124 135
        <activity
136
            android:exported="true"
125 137
            android:name=".activity.MainActicity"
126 138
            android:configChanges="keyboardHidden|orientation"
127 139
            android:label="@string/main_name"
@ -440,9 +452,6 @@
440 452
            android:label="@string/title_activity_che_xing"
441 453
            android:screenOrientation="portrait" />
442 454
        <activity
443
            android:name=".activity.TesttActivity"
444
            android:label="@string/title_activity_testt" />
445
        <activity
446 455
            android:name=".activity.DetailsActivity"
447 456
            android:label="@string/title_activity_details"
448 457
            android:screenOrientation="portrait" />
@ -512,9 +521,6 @@
512 521
            android:name=".activity.BasicNaviActivity"
513 522
            android:screenOrientation="portrait" />
514 523
        <activity
515
            android:name=".activity.QRChargingActivity"
516
            android:screenOrientation="portrait" />
517
        <activity
518 524
            android:name=".activity.ScanQRActivity"
519 525
            android:screenOrientation="portrait" />
520 526
        <activity
@ -675,9 +681,6 @@
675 681
            android:name=".activity.MemberLevelActivity"
676 682
            android:screenOrientation="portrait" />
677 683
        <activity
678
            android:name=".activity.TestProgressActivity"
679
            android:screenOrientation="portrait" />
680
        <activity
681 684
            android:name=".activity.AlbumActivityFeedback"
682 685
            android:screenOrientation="portrait" />
683 686
        <activity

+ 4 - 42
app/src/main/java/com/electric/chargingpile/activity/AboutActivity.java

@ -8,11 +8,9 @@ import android.content.Context;
8 8
import android.content.Intent;
9 9
import android.content.pm.PackageInfo;
10 10
import android.content.pm.PackageManager;
11
import android.graphics.Bitmap;
12 11
import android.graphics.BitmapFactory;
13 12
import android.net.Uri;
14 13
import android.os.Bundle;
15
import android.os.Environment;
16 14
import android.provider.MediaStore;
17 15
import android.view.View;
18 16
import android.view.View.OnClickListener;
@ -23,12 +21,12 @@ import android.widget.Toast;
23 21
import com.electric.chargingpile.BuildConfig;
24 22
import com.electric.chargingpile.R;
25 23
import com.electric.chargingpile.util.BarColorUtil;
24
import com.electric.chargingpile.util.ImageUitl;
25
import com.electric.chargingpile.util.PhotoUtils;
26 26
import com.electric.chargingpile.util.ToastUtil;
27 27
import com.umeng.analytics.MobclickAgent;
28 28

29 29
import java.io.File;
30
import java.io.FileOutputStream;
31
import java.io.IOException;
32 30
import java.util.List;
33 31

34 32
import pub.devrel.easypermissions.AppSettingsDialog;
@ -117,7 +115,7 @@ public class AboutActivity extends Activity implements OnClickListener, EasyPerm
117 115
                break;
118 116

119 117
            case R.id.icon_scan:
120
                saveBitmap(BitmapFactory.decodeResource(getResources(), R.drawable.icon_erweima));
118
                PhotoUtils.saveBitmap(this,BitmapFactory.decodeResource(getResources(), R.drawable.icon_erweima));
121 119
                break;
122 120

123 121

@ -137,43 +135,7 @@ public class AboutActivity extends Activity implements OnClickListener, EasyPerm
137 135
    }
138 136

139 137

140
    public void saveBitmap(Bitmap mBitmap) {
141
        String dir_path = Environment.getExternalStorageDirectory() + File.separator + "D1ev/";
142
        File directory = new File(dir_path);
143
        File f = new File(directory, "erweima.png");
144
        try {
145
            if (!directory.exists()) {
146
                directory.mkdir();//没有目录先创建目录
147
            }
148
            f.createNewFile();
149
        } catch (IOException e) {
150
            // TODO Auto-generated catch block
151
        }
152
        FileOutputStream fOut = null;
153
        try {
154
            fOut = new FileOutputStream(f);
155
        } catch (Exception e) {
156
            e.printStackTrace();
157
        }
158
        mBitmap.compress(Bitmap.CompressFormat.PNG, 100, fOut);
159
//        Log.e("!!!", "下载图片");
160
        Toast.makeText(AboutActivity.this, "保存成功", Toast.LENGTH_SHORT).show();
161
        try {
162
            fOut.flush();
163
        } catch (IOException e) {
164
            e.printStackTrace();
165
        }
166
        try {
167
            fOut.close();
168
        } catch (IOException e) {
169
            e.printStackTrace();
170
        }
171
        MediaStore.Images.Media.insertImage(getContentResolver(), mBitmap, "", "");
172
        Intent intent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
173
        Uri uri = Uri.fromFile(new File(dir_path));
174
        intent.setData(uri);
175
        mContext.sendBroadcast(intent);
176
    }
138

177 139

178 140
    @Override
179 141
    public void onPermissionsGranted(int requestCode, List<String> perms) {

+ 6 - 5
app/src/main/java/com/electric/chargingpile/activity/AdinShowActivity.java

@ -14,7 +14,6 @@ import android.net.Uri;
14 14
import android.net.http.SslError;
15 15
import android.os.Build;
16 16
import android.os.Bundle;
17
import android.os.Environment;
18 17
import android.provider.MediaStore;
19 18
import androidx.annotation.NonNull;
20 19
import androidx.core.content.FileProvider;
@ -63,6 +62,8 @@ import okhttp3.Call;
63 62
import pub.devrel.easypermissions.AfterPermissionGranted;
64 63
import pub.devrel.easypermissions.EasyPermissions;
65 64
65
import static com.electric.chargingpile.util.PhotoUtils.CACHE_DIR;
66
66 67
public class AdinShowActivity extends Activity implements View.OnClickListener {
67 68
    private WebView webView;
68 69
    private ImageView iv_back, iv_close;
@ -978,9 +979,9 @@ public class AdinShowActivity extends Activity implements View.OnClickListener {
978 979
    // 拍照
979 980
    private void takeCamera() {
980 981
        Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
981
        if (ImageUitl.hasSdcard()) {
982
//        if (ImageUitl.hasSdcard()) {
982 983
            String fileName = "android" + System.currentTimeMillis() / 1000 + ".jpg";
983
            cameraFilePath = ImageUitl.getPath(Environment.getExternalStorageDirectory() + "/" + "cdz") + "/" + fileName;
984
            cameraFilePath = ImageUitl.getPath( CACHE_DIR) + "/" + fileName;
984 985
            File imageFile = ImageUitl.getFile(cameraFilePath);
985 986
            Uri uri = parseUri(imageFile);
986 987
            intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);
@ -990,7 +991,7 @@ public class AdinShowActivity extends Activity implements View.OnClickListener {
990 991
                e.printStackTrace();
991 992
            }
992 993
993
        }
994
//        }
994 995
    }
995 996
996 997
    private Uri parseUri(File cameraFile) {
@ -1028,7 +1029,7 @@ public class AdinShowActivity extends Activity implements View.OnClickListener {
1028 1029
                result = data.getData();
1029 1030
            }
1030 1031
            if (result == null && ImageUitl.hasFile(cameraFilePath)) {
1031
                result = Uri.fromFile(new File(cameraFilePath));
1032
                result = parseUri(new File(cameraFilePath));
1032 1033
            }
1033 1034
1034 1035
            if (mOpenFileWebChromeClient.mFilePathCallbacks != null) {

+ 45 - 180
app/src/main/java/com/electric/chargingpile/activity/AlterOneActivity.java

@ -5,23 +5,18 @@ import android.annotation.SuppressLint;
5 5
import android.app.Activity;
6 6
import android.app.ProgressDialog;
7 7
import android.app.TimePickerDialog;
8
import android.content.ContentValues;
9 8
import android.content.Context;
10 9
import android.content.Intent;
11
import android.database.Cursor;
12 10
import android.graphics.Bitmap;
13 11
import android.graphics.BitmapFactory;
14 12
import android.graphics.Color;
15 13
import android.graphics.Matrix;
16
import android.graphics.drawable.BitmapDrawable;
17 14
import android.graphics.drawable.ColorDrawable;
18 15
import android.net.Uri;
19 16
import android.os.Build;
20 17
import android.os.Bundle;
21
import android.os.Environment;
22 18
import android.os.Handler;
23 19
import android.os.Message;
24
import android.provider.MediaStore;
25 20
import android.util.Base64;
26 21
import android.util.DisplayMetrics;
27 22
import android.util.Log;
@ -48,28 +43,29 @@ import androidx.annotation.NonNull;
48 43
import com.electric.chargingpile.R;
49 44
import com.electric.chargingpile.application.MainApplication;
50 45
import com.electric.chargingpile.data.Zhan;
46
import com.electric.chargingpile.engine.GlideEngine;
51 47
import com.electric.chargingpile.util.BarColorUtil;
52 48
import com.electric.chargingpile.util.Bimp;
53 49
import com.electric.chargingpile.util.DES3;
54
import com.electric.chargingpile.util.FileUtils;
55 50
import com.electric.chargingpile.util.ImageItem;
56
import com.electric.chargingpile.util.ImageUtils;
57 51
import com.electric.chargingpile.util.PublicWay;
58 52
import com.electric.chargingpile.util.Res;
59 53
import com.electric.chargingpile.util.StatusConstants;
60 54
import com.electric.chargingpile.util.ToastUtil;
61 55
import com.electric.chargingpile.util.UploadUtil;
56
import com.electric.chargingpile.util.Util;
62 57
import com.electric.chargingpile.view.AlertDialogTwo;
63 58
import com.electric.chargingpile.view.CustomProgressDialog;
64 59
import com.google.android.gms.appindexing.Action;
65 60
import com.google.android.gms.appindexing.AppIndex;
66 61
import com.google.android.gms.appindexing.Thing;
67 62
import com.google.android.gms.common.api.GoogleApiClient;
63
import com.luck.picture.lib.PictureSelector;
64
import com.luck.picture.lib.animators.AnimationType;
65
import com.luck.picture.lib.config.PictureConfig;
66
import com.luck.picture.lib.config.PictureMimeType;
67
import com.luck.picture.lib.entity.LocalMedia;
68 68
import com.umeng.analytics.MobclickAgent;
69
import com.zhihu.matisse.Matisse;
70
import com.zhihu.matisse.MimeType;
71
import com.zhihu.matisse.engine.impl.GlideEngine;
72
import com.zhihu.matisse.internal.entity.CaptureStrategy;
73 69

74 70
import org.json.JSONException;
75 71
import org.json.JSONObject;
@ -129,16 +125,13 @@ public class AlterOneActivity extends Activity implements View.OnClickListener,
129 125
    private EditText et_remark;
130 126
    private GridAdapter adapter;
131 127
    private View parentView;
132
    private PopupWindow pop = null;
128

133 129
    Bitmap bm = null;
134
    private String camePath;//拍照路径
135
    private LinearLayout ll_popup;
130

136 131
    private Animation animation;
137 132
    private ImageView point;
138 133
    private Toast toast = null;
139
    private static final String PHOTO_FILE_NAME = "android.jpg";
140
    private static final String PHOTO_FILE_PATH = getPath(Environment.getExternalStorageDirectory() + "/" + "cdz");
141
    private File tempFile;
134

142 135
    private static final int PHOTO_REQUEST_CAMERA = 1;
143 136
    private static final int PHOTO_REQUEST_GALLERY = 2;
144 137
    private static final int PHOTO_REQUEST_CUT = 3;
@ -189,11 +182,10 @@ public class AlterOneActivity extends Activity implements View.OnClickListener,
189 182
     * See https://g.co/AppIndexing/AndroidStudio for more information.
190 183
     */
191 184
    private GoogleApiClient client;
192

185
    private List<LocalMedia> mSelectionData =new ArrayList<LocalMedia>();
193 186
    @Override
194 187
    protected void onCreate(Bundle savedInstanceState) {
195 188
        super.onCreate(savedInstanceState);
196
        tempFile = getFile(PHOTO_FILE_PATH + "/" + PHOTO_FILE_NAME);
197 189
        Res.init(this);
198 190
        bimap = BitmapFactory.decodeResource(
199 191
                getResources(),
@ -223,64 +215,6 @@ public class AlterOneActivity extends Activity implements View.OnClickListener,
223 215
    }
224 216

225 217
    public void Init() {
226

227
        pop = new PopupWindow(AlterOneActivity.this);
228

229
        View view = getLayoutInflater().inflate(R.layout.item_popupwindows, null);
230

231
        ll_popup = (LinearLayout) view.findViewById(R.id.ll_popup);
232

233
        pop.setWidth(ViewGroup.LayoutParams.MATCH_PARENT);
234
        pop.setHeight(ViewGroup.LayoutParams.WRAP_CONTENT);
235
        pop.setBackgroundDrawable(new BitmapDrawable());
236
        pop.setFocusable(true);
237
        pop.setOutsideTouchable(true);
238
        pop.setContentView(view);
239

240

241
        final RelativeLayout parent = (RelativeLayout) view.findViewById(R.id.parent);
242
        Button bt1 = (Button) view.findViewById(R.id.item_popupwindows_camera);
243
        Button bt2 = (Button) view.findViewById(R.id.item_popupwindows_Photo);
244
        Button bt3 = (Button) view.findViewById(R.id.item_popupwindows_cancel);
245
        parent.setOnClickListener(new View.OnClickListener() {
246

247
            @Override
248
            public void onClick(View v) {
249
                pop.dismiss();
250
                ll_popup.clearAnimation();
251
            }
252
        });
253
        bt1.setOnClickListener(new View.OnClickListener() {
254
            @Override
255
            public void onClick(View v) {
256
                pop.dismiss();
257
                ll_popup.clearAnimation();
258
                if (MainScanActivity.isCameraUseable()) {
259
                    photo();
260
                } else {
261
                    ToastUtil.showToast(getApplicationContext(), "您当前关闭了调用摄像头权限", Toast.LENGTH_SHORT);
262
                }
263
            }
264
        });
265
        bt2.setOnClickListener(new View.OnClickListener() {
266
            @Override
267
            public void onClick(View v) {
268
                Intent intent = new Intent(AlterOneActivity.this,
269
                        AlbumActivityAlter.class);
270
                startActivity(intent);
271
                overridePendingTransition(R.anim.activity_translate_in, R.anim.activity_translate_out);
272
                pop.dismiss();
273
                ll_popup.clearAnimation();
274
            }
275
        });
276
        bt3.setOnClickListener(new View.OnClickListener() {
277
            @Override
278
            public void onClick(View v) {
279
                pop.dismiss();
280
                ll_popup.clearAnimation();
281
            }
282
        });
283

284 218
        noScrollgridview = (GridView) findViewById(R.id.noScrollgridview);
285 219
        noScrollgridview.setSelector(new ColorDrawable(Color.TRANSPARENT));
286 220
        adapter = new GridAdapter(this);
@ -306,15 +240,26 @@ public class AlterOneActivity extends Activity implements View.OnClickListener,
306 240
     * 调用图库选择
307 241
     */
308 242
    private void callGallery() {
309
        Matisse.from(AlterOneActivity.this)
310
                .choose(MimeType.of(MimeType.JPEG, MimeType.PNG, MimeType.GIF))
311
                .showSingleMediaType(true)
312
                .countable(true)
313
                .maxSelectable(PIC_NUM - Bimp.tempSelectBitmap.size())
314
                .capture(true)
315
                .captureStrategy(new CaptureStrategy(true, "com.electric.chargingpile.provider"))
316
                .imageEngine(new GlideEngine())
317
                .forResult(REQUEST_CODE_CHOOSE);
243
        PictureSelector.create(this)
244
                    .openGallery(PictureMimeType.ofImage())
245
                    .maxSelectNum(PIC_NUM-Bimp.tempSelectBitmap.size())
246
                    .selectionMode(PictureConfig.MULTIPLE)
247
                   // .selectionData(mSelectionData)//是否传入已选图片
248
                    .isCompress(true)//是否压缩
249
                    .isPreviewEggs(true)//预览图片时是否增强左右滑动图片体验
250
                    .isGif(true)//是否显示gif
251
                    .isAndroidQTransform(true)
252
                    .imageEngine(GlideEngine.createGlideEngine())
253
                    .isWeChatStyle(false)// 是否开启微信图片选择风格
254
                    .isUseCustomCamera(false)// 是否使用自定义相机
255
                    .isPageStrategy(true)// 是否开启分页策略 & 每页多少条;默认开启
256
                    .setPictureStyle(Util.getWhiteStyle(this))// 动态自定义相册主题
257
                    .setRecyclerAnimationMode(AnimationType.SLIDE_IN_BOTTOM_ANIMATION)// 列表动画效果
258
                    .isMaxSelectEnabledMask(true)// 选择数到了最大阀值列表是否启用蒙层效果
259
                    .imageSpanCount(4)// 每行显示个数
260
                    .isReturnEmpty(false)// 未选择数据时点击按钮是否可以返回
261
                    .isAutomaticTitleRecyclerTop(true)//图片列表超过一屏连续点击顶部标题栏快速回滚至顶部
262
                    .forResult(REQUEST_CODE_CHOOSE);
318 263
    }
319 264

320 265
    @Override
@ -344,16 +289,22 @@ public class AlterOneActivity extends Activity implements View.OnClickListener,
344 289
                    @Override
345 290
                    public ObservableSource<Boolean> apply(Intent intent) throws Exception {
346 291
                        try {
292
                            mSelectionData= PictureSelector.obtainMultipleResult(data);
347 293

348
                            List<Uri> uriList = Matisse.obtainResult(data);
349
                            for (Uri uri : uriList) {
350
                                Bitmap bitmap = BitmapFactory.decodeStream(getContentResolver().openInputStream(uri));
351
                                File file = FileUtils.from(AlterOneActivity.this, uri);
352

353
                                bitmap = FileUtils.rotateIfRequired(file, bitmap);
354
                                bitmap = imageZoom(bitmap);
294
                            for (LocalMedia localMedia : mSelectionData) {
295
//                                Bitmap bitmap = BitmapFactory.decodeFile(getContentResolver().openInputStream(uri));
296
//                                File file = FileUtils.from(AlterOneActivity.this, uri);
297
//
298
//                                bitmap = FileUtils.rotateIfRequired(file, bitmap);
299
//                                bitmap = imageZoom(bitmap);
300
                                String path="";
301
                                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q){
302
                                    path= localMedia.getAndroidQToPath();
303
                                }else{
304
                                    path=localMedia.getPath();
305
                                }
355 306
                                ImageItem takePhoto = new ImageItem();
356
                                takePhoto.setBitmap(bitmap);
307
                                takePhoto.setBitmap(imageZoom(BitmapFactory.decodeFile(path)));
357 308
                                Bimp.tempSelectBitmap.add(takePhoto);
358 309
                            }
359 310
                            return Observable.just(true);
@ -613,18 +564,6 @@ public class AlterOneActivity extends Activity implements View.OnClickListener,
613 564

614 565
    private static final int TAKE_PICTURE = 0x000001;
615 566

616

617
    public void photo() {
618

619
        if (hasSdcard()) {
620
            int currentapiVersion = Build.VERSION.SDK_INT;
621
            Log.e("currentapiVersion", "currentapiVersion====>" + currentapiVersion);
622
            Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);//���������
623
            intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(tempFile));
624
            startActivityForResult(intent, PHOTO_REQUEST_CAMERA);
625
        }
626
    }
627

628 567
    @Override
629 568
    public void onClick(View v) {
630 569
        if (imm.isActive()) {
@ -841,81 +780,7 @@ public class AlterOneActivity extends Activity implements View.OnClickListener,
841 780
        }
842 781
    }
843 782

844
    private void crop(Uri uri, Uri cutImgUri) {
845
        Intent intent = new Intent("com.android.camera.action.CROP");
846
        intent.setDataAndType(getImageContentUri(this, tempFile), "image/*");
847
        intent.putExtra("crop", "true");
848
        intent.putExtra("outputFormat", "JPEG");
849
        intent.putExtra("noFaceDetection", true);
850
        intent.putExtra("return-data", false);
851
        intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(tempFile));
852
        startActivityForResult(intent, PHOTO_REQUEST_CUT);
853
    }
854

855
    private boolean hasSdcard() {
856
        if (Environment.getExternalStorageState().equals(
857
                Environment.MEDIA_MOUNTED)) {
858
            return true;
859
        } else {
860
            return false;
861
        }
862
    }
863

864
    private static String getPath(String path) {
865
        File f = new File(path);
866
        if (!f.exists()) {
867
            f.mkdirs();
868
        }
869
        return f.getAbsolutePath();
870
    }
871

872
    private File getFile(String path) {
873
        File f = new File(path);
874
        if (!f.exists()) {
875
            try {
876
                f.createNewFile();
877
            } catch (IOException e) {
878
                e.printStackTrace();
879
            }
880
        }
881
        return f;
882
    }
883

884
    public Bitmap decodeUriAsBitmap(Uri uri) {
885
        Bitmap bitmap = null;
886
        try {
887
            bitmap = BitmapFactory.decodeStream(this.getContentResolver().openInputStream(uri));
888
        } catch (FileNotFoundException e) {
889
            e.printStackTrace();
890
            return null;
891
        }
892
        return bitmap;
893
    }
894

895
    public static Uri getImageContentUri(Context context, File imageFile) {
896
        String filePath = imageFile.getAbsolutePath();
897
        Cursor cursor = context.getContentResolver().query(
898
                MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
899
                new String[]{MediaStore.Images.Media._ID},
900
                MediaStore.Images.Media.DATA + "=? ",
901
                new String[]{filePath}, null);
902 783

903
        if (cursor != null && cursor.moveToFirst()) {
904
            int id = cursor.getInt(cursor
905
                    .getColumnIndex(MediaStore.MediaColumns._ID));
906
            Uri baseUri = Uri.parse("content://media/external/images/media");
907
            return Uri.withAppendedPath(baseUri, "" + id);
908
        } else {
909
            if (imageFile.exists()) {
910
                ContentValues values = new ContentValues();
911
                values.put(MediaStore.Images.Media.DATA, filePath);
912
                return context.getContentResolver().insert(
913
                        MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);
914
            } else {
915
                return null;
916
            }
917
        }
918
    }
919 784

920 785
    public static boolean containsEmoji(String source) {
921 786
        int len = source.length();

+ 47 - 21
app/src/main/java/com/electric/chargingpile/activity/CarOwnerCertificateActivity.java

@ -13,6 +13,7 @@ import android.graphics.BitmapFactory;
13 13
import android.graphics.Matrix;
14 14
import android.graphics.drawable.Drawable;
15 15
import android.net.Uri;
16
import android.os.Build;
16 17
import android.os.Bundle;
17 18
import android.text.TextUtils;
18 19
import android.util.Base64;
@ -32,6 +33,7 @@ import com.bumptech.glide.request.transition.Transition;
32 33
import com.electric.chargingpile.R;
33 34
import com.electric.chargingpile.application.MainApplication;
34 35
import com.electric.chargingpile.data.CarOwnerCertificateBean;
36
import com.electric.chargingpile.engine.GlideEngine;
35 37
import com.electric.chargingpile.entity.CarBrandGroupEntity;
36 38
import com.electric.chargingpile.entity.CarModelEntity;
37 39
import com.electric.chargingpile.entity.CarSeriesEntity;
@ -44,13 +46,16 @@ import com.electric.chargingpile.util.FileUtils;
44 46
import com.electric.chargingpile.util.JsonUtils;
45 47
import com.electric.chargingpile.util.LoadingDialog;
46 48
import com.electric.chargingpile.util.ToastUtil;
49
import com.electric.chargingpile.util.Util;
47 50
import com.electric.chargingpile.view.TextImageView;
48 51
import com.google.gson.Gson;
49 52
import com.google.gson.reflect.TypeToken;
50
import com.zhihu.matisse.Matisse;
51
import com.zhihu.matisse.MimeType;
52
import com.zhihu.matisse.engine.impl.GlideEngine;
53
import com.zhihu.matisse.internal.entity.CaptureStrategy;
53
54
import com.luck.picture.lib.PictureSelector;
55
import com.luck.picture.lib.animators.AnimationType;
56
import com.luck.picture.lib.config.PictureConfig;
57
import com.luck.picture.lib.config.PictureMimeType;
58
import com.luck.picture.lib.entity.LocalMedia;
54 59
import com.zhy.http.okhttp.OkHttpUtils;
55 60
import com.zhy.http.okhttp.callback.StringCallback;
56 61
@ -417,15 +422,23 @@ public class CarOwnerCertificateActivity extends AppCompatActivity implements Vi
417 422
            public void subscribe(ObservableEmitter<String> subscriber) throws Exception {
418 423
419 424
                try {
420
                    List<Uri> uriList = Matisse.obtainResult(data);
421
                    Uri uri = uriList.get(0);
422
                    Bitmap bitmap = BitmapFactory.decodeStream(getContentResolver().openInputStream(uri));
423
                    File file = FileUtils.from(CarOwnerCertificateActivity.this, uri);
424
425
                    bitmap = FileUtils.rotateIfRequired(file, bitmap);
426
                    bitmap = imageZoom(bitmap);
427
                    insertBitmap = bitmap;
428
                    subscriber.onComplete();
425
//                    List<Uri> uriList = Matisse.obtainResult(data);
426
                    List<LocalMedia> localList = PictureSelector.obtainMultipleResult(data);
427
                    if (localList !=null && localList.size()>0 ){
428
                        LocalMedia localMedia = localList.get(0);
429
//                        Bitmap bitmap = BitmapFactory.decodeStream(getContentResolver().openInputStream(uri));
430
//                        File file = FileUtils.from(CarOwnerCertificateActivity.this, uri);
431
//                        bitmap = FileUtils.rotateIfRequired(file, bitmap);
432
                        String path="";
433
                        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q){
434
                            path= localMedia.getAndroidQToPath();
435
                        }else{
436
                            path=localMedia.getPath();
437
                        }
438
                        insertBitmap =imageZoom( BitmapFactory.decodeFile(path));
439
                        subscriber.onComplete();
440
                    }
441
429 442
                } catch (Exception e) {
430 443
                    e.printStackTrace();
431 444
                    subscriber.onError(e);
@ -638,15 +651,28 @@ public class CarOwnerCertificateActivity extends AppCompatActivity implements Vi
638 651
    @AfterPermissionGranted(RC_ALBUM_PERM)
639 652
    public void permissionTask() {
640 653
        if (isPermissionOK()) {
641
            Matisse.from(CarOwnerCertificateActivity.this)
642
                    .choose(MimeType.of(MimeType.JPEG, MimeType.PNG))
643
                    .showSingleMediaType(true)
644
                    .countable(true)
645
                    .maxSelectable(1)
646
                    .capture(true)
647
                    .captureStrategy(new CaptureStrategy(true, "com.electric.chargingpile.provider"))
648
                    .imageEngine(new GlideEngine())
654
            PictureSelector.create(this)
655
                    .openGallery(PictureMimeType.ofImage())
656
                    .maxSelectNum(1)
657
                    .selectionMode(PictureConfig.SINGLE)
658
                    .isSingleDirectReturn(true)
659
                    .isCompress(true)//是否压缩
660
                    .isPreviewEggs(true)//预览图片时是否增强左右滑动图片体验
661
                    .isGif(false)//是否显示gif
662
                    .isAndroidQTransform(true)
663
                    .imageEngine(GlideEngine.createGlideEngine())
664
                    .isWeChatStyle(false)// 是否开启微信图片选择风格
665
                    .isUseCustomCamera(false)// 是否使用自定义相机
666
                    .isPageStrategy(true)// 是否开启分页策略 & 每页多少条;默认开启
667
                    .setPictureStyle(Util.getWhiteStyle(this))// 动态自定义相册主题
668
                    .setRecyclerAnimationMode(AnimationType.SLIDE_IN_BOTTOM_ANIMATION)// 列表动画效果
669
                    .isMaxSelectEnabledMask(true)// 选择数到了最大阀值列表是否启用蒙层效果
670
                    .imageSpanCount(4)// 每行显示个数
671
                    .isReturnEmpty(false)// 未选择数据时点击按钮是否可以返回
672
                    .isAutomaticTitleRecyclerTop(true)//图片列表超过一屏连续点击顶部标题栏快速回滚至顶部
649 673
                    .forResult(REQUEST_CODE_CHOOSE);
674
675
650 676
        } else {
651 677
            EasyPermissions.requestPermissions(
652 678
                    this, "充电桩想要获取您的图片读取权限,是否允许?",

+ 50 - 160
app/src/main/java/com/electric/chargingpile/activity/ChargingCommentActivity.java

@ -3,23 +3,18 @@ package com.electric.chargingpile.activity;
3 3
import android.Manifest;
4 4
import android.app.Activity;
5 5
import android.app.ProgressDialog;
6
import android.content.ContentValues;
7 6
import android.content.Context;
8 7
import android.content.Intent;
9
import android.database.Cursor;
10 8
import android.graphics.Bitmap;
11 9
import android.graphics.BitmapFactory;
12 10
import android.graphics.Color;
13 11
import android.graphics.Matrix;
14 12
import android.graphics.drawable.BitmapDrawable;
15 13
import android.graphics.drawable.ColorDrawable;
16
import android.net.Uri;
17 14
import android.os.Build;
18 15
import android.os.Bundle;
19
import android.os.Environment;
20 16
import android.os.Handler;
21 17
import android.os.Message;
22
import android.provider.MediaStore;
23 18
import android.text.Editable;
24 19
import android.text.TextWatcher;
25 20
import android.util.Base64;
@ -32,10 +27,8 @@ import android.view.animation.AnimationUtils;
32 27
import android.view.inputmethod.InputMethodManager;
33 28
import android.widget.AdapterView;
34 29
import android.widget.BaseAdapter;
35
import android.widget.Button;
36 30
import android.widget.GridView;
37 31
import android.widget.ImageView;
38
import android.widget.LinearLayout;
39 32
import android.widget.PopupWindow;
40 33
import android.widget.RelativeLayout;
41 34
import android.widget.ScrollView;
@ -50,12 +43,11 @@ import com.electric.chargingpile.application.MainApplication;
50 43
import com.electric.chargingpile.data.ChargingShareBean;
51 44
import com.electric.chargingpile.data.CommentsBean;
52 45
import com.electric.chargingpile.data.RObject;
46
import com.electric.chargingpile.engine.GlideEngine;
53 47
import com.electric.chargingpile.util.BarColorUtil;
54 48
import com.electric.chargingpile.util.Bimp;
55 49
import com.electric.chargingpile.util.DES3;
56
import com.electric.chargingpile.util.FileUtils;
57 50
import com.electric.chargingpile.util.ImageItem;
58
import com.electric.chargingpile.util.ImageUtils;
59 51
import com.electric.chargingpile.util.JsonUtils;
60 52
import com.electric.chargingpile.util.LoadingDialog;
61 53
import com.electric.chargingpile.util.Md5Util;
@ -64,15 +56,17 @@ import com.electric.chargingpile.util.Res;
64 56
import com.electric.chargingpile.util.StatusConstants;
65 57
import com.electric.chargingpile.util.ToastUtil;
66 58
import com.electric.chargingpile.util.UploadUtil;
59
import com.electric.chargingpile.util.Util;
67 60
import com.electric.chargingpile.view.HongBaoDialog;
68 61
import com.electric.chargingpile.view.HongBaoResultDialog;
69 62
import com.electric.chargingpile.view.REditText;
70 63
import com.electric.chargingpile.view.RatingBarView;
64
import com.luck.picture.lib.PictureSelector;
65
import com.luck.picture.lib.animators.AnimationType;
66
import com.luck.picture.lib.config.PictureConfig;
67
import com.luck.picture.lib.config.PictureMimeType;
68
import com.luck.picture.lib.entity.LocalMedia;
71 69
import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet;
72
import com.zhihu.matisse.Matisse;
73
import com.zhihu.matisse.MimeType;
74
import com.zhihu.matisse.engine.impl.GlideEngine;
75
import com.zhihu.matisse.internal.entity.CaptureStrategy;
76 70
import com.zhy.http.okhttp.OkHttpUtils;
77 71
import com.zhy.http.okhttp.callback.StringCallback;
78 72
import com.zhy.view.flowlayout.FlowLayout;
@ -84,7 +78,6 @@ import org.json.JSONObject;
84 78
85 79
import java.io.ByteArrayOutputStream;
86 80
import java.io.File;
87
import java.io.FileNotFoundException;
88 81
import java.io.IOException;
89 82
import java.net.URLEncoder;
90 83
import java.util.ArrayList;
@ -137,12 +130,9 @@ public class ChargingCommentActivity extends Activity implements View.OnClickLis
137 130
    private String select_s = "";
138 131
    private String select_ss = "";
139 132
    private TextView tv_grade;
140
    private File tempFile;
141
    private static String PHOTO_FILE_NAME = "";
142
    private static final String PHOTO_FILE_PATH = getPath(Environment.getExternalStorageDirectory() + "/" + "cdz");
133
143 134
    public static Bitmap bimap;
144
    private PopupWindow pop = null;
145
    private LinearLayout ll_popup;
135
146 136
    private GridView noScrollgridview;
147 137
    private ScrollView sv;
148 138
    private GridAdapter adapter;
@ -193,7 +183,7 @@ public class ChargingCommentActivity extends Activity implements View.OnClickLis
193 183
            super.handleMessage(msg);
194 184
        }
195 185
    };
196
186
    private List<LocalMedia> mSelectionData =new ArrayList<LocalMedia>();
197 187
    @Override
198 188
    protected void onCreate(Bundle savedInstanceState) {
199 189
        super.onCreate(savedInstanceState);
@ -201,9 +191,6 @@ public class ChargingCommentActivity extends Activity implements View.OnClickLis
201 191
        BarColorUtil.initStatusBarColor(ChargingCommentActivity.this);
202 192
        dialog = new LoadingDialog(this);
203 193
        dialog.setCanceledOnTouchOutside(false);
204
        long appTime1 = System.currentTimeMillis() / 1000;
205
        PHOTO_FILE_NAME = "android" + appTime1 + ".jpg";
206
        tempFile = getFile(PHOTO_FILE_PATH + "/" + PHOTO_FILE_NAME);
207 194
        Res.init(this);
208 195
        bimap = BitmapFactory.decodeResource(
209 196
                getResources(),
@ -451,61 +438,6 @@ public class ChargingCommentActivity extends Activity implements View.OnClickLis
451 438
    }
452 439
453 440
    public void Init() {
454
        pop = new PopupWindow(ChargingCommentActivity.this);
455
        View view = getLayoutInflater().inflate(R.layout.item_popupwindows, null);
456
        ll_popup = (LinearLayout) view.findViewById(R.id.ll_popup);
457
458
        pop.setWidth(ViewGroup.LayoutParams.MATCH_PARENT);
459
        pop.setHeight(ViewGroup.LayoutParams.WRAP_CONTENT);
460
        pop.setBackgroundDrawable(new BitmapDrawable());
461
        pop.setFocusable(true);
462
        pop.setOutsideTouchable(true);
463
        pop.setContentView(view);
464
465
466
        final RelativeLayout parent = (RelativeLayout) view.findViewById(R.id.parent);
467
        Button bt1 = (Button) view
468
                .findViewById(R.id.item_popupwindows_camera);
469
        Button bt2 = (Button) view
470
                .findViewById(R.id.item_popupwindows_Photo);
471
        Button bt3 = (Button) view
472
                .findViewById(R.id.item_popupwindows_cancel);
473
        parent.setOnClickListener(new View.OnClickListener() {
474
475
            @Override
476
            public void onClick(View v) {
477
                // TODO Auto-generated method stub
478
                pop.dismiss();
479
                ll_popup.clearAnimation();
480
            }
481
        });
482
        bt1.setOnClickListener(new View.OnClickListener() {
483
            public void onClick(View v) {
484
                photo();
485
//                saveFullImage();
486
                pop.dismiss();
487
//                Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
488
//                ((Activity) mContext).startActivityForResult(intent, 2);
489
                ll_popup.clearAnimation();
490
            }
491
        });
492
        bt2.setOnClickListener(new View.OnClickListener() {
493
            public void onClick(View v) {
494
                Intent intent = new Intent(ChargingCommentActivity.this,
495
                        AlbumActivityCharging.class);
496
                startActivity(intent);
497
                overridePendingTransition(R.anim.activity_translate_in, R.anim.activity_translate_out);
498
//                startActivityForResult(intent, 1);
499
                pop.dismiss();
500
                ll_popup.clearAnimation();
501
            }
502
        });
503
        bt3.setOnClickListener(new View.OnClickListener() {
504
            public void onClick(View v) {
505
                pop.dismiss();
506
                ll_popup.clearAnimation();
507
            }
508
        });
509 441
510 442
        noScrollgridview = (GridView) findViewById(R.id.noScrollgridview);
511 443
        noScrollgridview.setSelector(new ColorDrawable(Color.TRANSPARENT));
@ -534,6 +466,7 @@ public class ChargingCommentActivity extends Activity implements View.OnClickLis
534 466
     * 调用图库选择
535 467
     */
536 468
    private void callGallery() {
469
/*
537 470
        Matisse.from(ChargingCommentActivity.this)
538 471
                .choose(MimeType.of(MimeType.JPEG, MimeType.PNG, MimeType.GIF))
539 472
                .showSingleMediaType(true)
@ -543,6 +476,29 @@ public class ChargingCommentActivity extends Activity implements View.OnClickLis
543 476
                .captureStrategy(new CaptureStrategy(true, "com.electric.chargingpile.provider"))
544 477
                .imageEngine(new GlideEngine())
545 478
                .forResult(REQUEST_CODE_CHOOSE);
479
*/
480
481
        PictureSelector.create(this)
482
                .openGallery(PictureMimeType.ofImage())
483
                .maxSelectNum(PIC_NUM)
484
                .selectionMode(PictureConfig.MULTIPLE)
485
                .selectionData(mSelectionData)//是否传入已选图片
486
                .isCompress(true)//是否压缩
487
                .isPreviewEggs(true)//预览图片时是否增强左右滑动图片体验
488
                .isGif(true)//是否显示gif
489
                .isAndroidQTransform(true)
490
                .imageEngine(GlideEngine.createGlideEngine())
491
                .isWeChatStyle(false)// 是否开启微信图片选择风格
492
                .isUseCustomCamera(false)// 是否使用自定义相机
493
                .isPageStrategy(true)// 是否开启分页策略 & 每页多少条;默认开启
494
                .setPictureStyle(Util.getWhiteStyle(this))// 动态自定义相册主题
495
                .setRecyclerAnimationMode(AnimationType.SLIDE_IN_BOTTOM_ANIMATION)// 列表动画效果
496
                .isMaxSelectEnabledMask(true)// 选择数到了最大阀值列表是否启用蒙层效果
497
                .imageSpanCount(4)// 每行显示个数
498
                .isReturnEmpty(false)// 未选择数据时点击按钮是否可以返回
499
                .isAutomaticTitleRecyclerTop(true)//图片列表超过一屏连续点击顶部标题栏快速回滚至顶部
500
                .forResult(REQUEST_CODE_CHOOSE);
501
546 502
    }
547 503
548 504
    @Override
@ -571,15 +527,23 @@ public class ChargingCommentActivity extends Activity implements View.OnClickLis
571 527
            @Override
572 528
            public void subscribe(ObservableEmitter<String> subscriber) throws Exception {
573 529
                try {
574
                    List<Uri> uriList = Matisse.obtainResult(data);
575
                    for (Uri uri : uriList) {
576
                        Bitmap bitmap = BitmapFactory.decodeStream(getContentResolver().openInputStream(uri));
577
                        File file = FileUtils.from(ChargingCommentActivity.this, uri);
578
579
                        bitmap = FileUtils.rotateIfRequired(file, bitmap);
580
                        bitmap = imageZoom(bitmap);
530
                    mSelectionData= PictureSelector.obtainMultipleResult(data);
531
532
//                    List<Uri> uriList = Matisse.obtainResult(data);
533
                    for (LocalMedia media : mSelectionData) {
534
//                        Bitmap bitmap = BitmapFactory.decodeStream(getContentResolver().openInputStream(uri));
535
//                        File file = FileUtils.from(ChargingCommentActivity.this, uri);
536
//
537
//                        bitmap = FileUtils.rotateIfRequired(file, bitmap);
538
//                        bitmap = imageZoom(bitmap);
539
                        String path="";
540
                        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q){
541
                            path= media.getAndroidQToPath();
542
                        }else{
543
                            path=media.getPath();
544
                        }
581 545
                        ImageItem takePhoto = new ImageItem();
582
                        takePhoto.setBitmap(bitmap);
546
                        takePhoto.setBitmap(imageZoom(BitmapFactory.decodeFile(path)));
583 547
                        Bimp.tempSelectBitmap.add(takePhoto);
584 548
                        subscriber.onNext("");
585 549
                    }
@ -1173,81 +1137,7 @@ public class ChargingCommentActivity extends Activity implements View.OnClickLis
1173 1137
        }
1174 1138
    }
1175 1139
1176
    public void photo() {
1177
        if (hasSdcard()) {
1178
            int currentapiVersion = Build.VERSION.SDK_INT;
1179
            Log.e("currentapiVersion", "currentapiVersion====>" + currentapiVersion);
1180
            Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);//���������
1181
            intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(tempFile));
1182
            startActivityForResult(intent, PHOTO_REQUEST_CAMERA);
1183
        }
1184
    }
1185 1140
1186
    private boolean hasSdcard() {
1187
        if (Environment.getExternalStorageState().equals(
1188
                Environment.MEDIA_MOUNTED)) {
1189
            return true;
1190
        } else {
1191
            return false;
1192
        }
1193
    }
1194
1195
    private void crop(Uri uri, Uri cutImgUri) {
1196
        // �ü�ͼƬ��ͼ
1197
        Intent intent = new Intent("com.android.camera.action.CROP");
1198
        intent.setDataAndType(getImageContentUri(this, tempFile), "image/*");
1199
1200
        intent.putExtra("crop", "true");
1201
        // �ü���ı�����1��1
1202
//        intent.putExtra("aspectX", 16);
1203
//        intent.putExtra("aspectY", 9);
1204
//        // �ü������ͼƬ�ijߴ��С
1205
//        intent.putExtra("outputX", 640);
1206
//        intent.putExtra("outputY", 360);
1207
1208
        // ͼƬ��ʽ
1209
        intent.putExtra("outputFormat", "JPEG");
1210
        intent.putExtra("noFaceDetection", true);// ȡ������ʶ��
1211
        intent.putExtra("return-data", false);// true:������uri��false������uri
1212
        intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(tempFile));//д���ȡ��ͼƬ
1213
        startActivityForResult(intent, PHOTO_REQUEST_CUT);
1214
    }
1215
1216
    public static Uri getImageContentUri(Context context, File imageFile) {
1217
        String filePath = imageFile.getAbsolutePath();
1218
        Cursor cursor = context.getContentResolver().query(
1219
                MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
1220
                new String[]{MediaStore.Images.Media._ID},
1221
                MediaStore.Images.Media.DATA + "=? ",
1222
                new String[]{filePath}, null);
1223
1224
        if (cursor != null && cursor.moveToFirst()) {
1225
            int id = cursor.getInt(cursor
1226
                    .getColumnIndex(MediaStore.MediaColumns._ID));
1227
            Uri baseUri = Uri.parse("content://media/external/images/media");
1228
            return Uri.withAppendedPath(baseUri, "" + id);
1229
        } else {
1230
            if (imageFile.exists()) {
1231
                ContentValues values = new ContentValues();
1232
                values.put(MediaStore.Images.Media.DATA, filePath);
1233
                return context.getContentResolver().insert(
1234
                        MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);
1235
            } else {
1236
                return null;
1237
            }
1238
        }
1239
    }
1240
1241
    public Bitmap decodeUriAsBitmap(Uri uri) {
1242
        Bitmap bitmap = null;
1243
        try {
1244
            bitmap = BitmapFactory.decodeStream(this.getContentResolver().openInputStream(uri));
1245
        } catch (FileNotFoundException e) {
1246
            e.printStackTrace();
1247
            return null;
1248
        }
1249
        return bitmap;
1250
    }
1251 1141
1252 1142
    protected void onRestart() {
1253 1143
        adapter.update();

+ 3 - 67
app/src/main/java/com/electric/chargingpile/activity/ClaimDataActivity.java

@ -8,7 +8,7 @@ import android.content.SharedPreferences;
8 8
import android.graphics.Bitmap;
9 9
import android.net.Uri;
10 10
import android.os.Bundle;
11
import android.os.Environment;
11
12 12
import android.os.Handler;
13 13
import android.os.Message;
14 14
import android.telephony.TelephonyManager;
@ -50,6 +50,8 @@ import java.util.Date;
50 50
import java.util.HashMap;
51 51
import java.util.Map;
52 52
53
import static com.electric.chargingpile.util.PhotoUtils.CACHE_DIR;
54
53 55
54 56
public class ClaimDataActivity extends Activity {
55 57
    private TextView zhanName, address, shuoming;
@ -582,31 +584,6 @@ public class ClaimDataActivity extends Activity {
582 584
    }
583 585
584 586
    /**
585
     * 裁剪图片方法实现 @param uri
586
     */
587
    public void startPhotoZoom(Uri uri) {
588
        /*
589
         *   * 至于下面这个Intent的ACTION是怎么知道的,大家可以看下自己路径下的如下网页   *
590
         * yourself_sdk_path/docs/reference/android/content/Intent.html   *
591
         * 直接在里面Ctrl+F搜:CROP ,之前小马没仔细看过,其实安卓系统早已经有自带图片裁剪功能,   * 是直接调本地库的,不懂C C++
592
         * 这个不做详细了解去了,有轮子就用轮子,不再研究轮子是怎么   * 制做的了...吼吼
593
         */
594
        Intent intent = new Intent("com.android.camera.action.CROP");
595
        intent.setDataAndType(uri, "image/*");
596
597
        // 下面这个crop=true是设置在开启的Intent中设置显示的VIEW可裁剪
598
        intent.putExtra("crop", "true");
599
        // aspectX aspectY 是宽高的比例
600
        intent.putExtra("aspectX", 4);
601
        intent.putExtra("aspectY", 3);
602
        // outputX outputY 是裁剪图片宽高
603
        intent.putExtra("outputX", 400);
604
        intent.putExtra("outputY", 300);
605
        intent.putExtra("return-data", true);
606
        startActivityForResult(intent, 3);
607
    }
608
609
    /**
610 587
     * 保存裁剪之后的图片数据
611 588
     **/
612 589
    private void setPicToView(Intent picdata) {
@ -623,33 +600,6 @@ public class ClaimDataActivity extends Activity {
623 600
        }
624 601
    }
625 602
626
    private String bitmapToBase64(Bitmap bitmap) {
627
628
        String result = null;
629
        ByteArrayOutputStream baos = null;
630
        try {
631
            if (bitmap != null) {
632
                baos = new ByteArrayOutputStream();
633
                bitmap.compress(Bitmap.CompressFormat.JPEG, 100, baos);
634
                baos.flush();
635
                baos.close();
636
                byte[] bitmapBytes = baos.toByteArray();
637
                result = Base64.encodeToString(bitmapBytes, Base64.DEFAULT);
638
            }
639
        } catch (IOException e) {
640
            e.printStackTrace();
641
        } finally {
642
            try {
643
                if (baos != null) {
644
                    baos.flush();
645
                    baos.close();
646
                }
647
            } catch (IOException e) {
648
                e.printStackTrace();
649
            }
650
        }
651
        return result;
652
    }
653 603
654 604
    @Override
655 605
    public void onActivityResult(final int requestCode, int resultCode,
@ -660,20 +610,6 @@ public class ClaimDataActivity extends Activity {
660 610
            return;
661 611
662 612
        switch (requestCode) {
663
            // 如果是直接从相册获取
664
            case 1:
665
                if (data != null) {
666
                    startPhotoZoom(data.getData());
667
                    Toast.makeText(mContext, "拖动正方形角可调整剪切大小",
668
                            android.widget.Toast.LENGTH_SHORT).show();
669
                }
670
                break;
671
            // 如果是调用相机拍照时
672
            case 2:
673
                File temp = new File(Environment.getExternalStorageDirectory()
674
                        + "/androidapp.jpg");
675
                startPhotoZoom(Uri.fromFile(temp));
676
                break;
677 613
            // 取得裁剪后的图片
678 614
            case 3:
679 615
                if (data != null) {

+ 96 - 78
app/src/main/java/com/electric/chargingpile/activity/ClaimSurveyTwoActivity.java

@ -16,7 +16,6 @@ import android.graphics.drawable.ColorDrawable;
16 16
import android.net.Uri;
17 17
import android.os.Build;
18 18
import android.os.Bundle;
19
import android.os.Environment;
20 19
import android.os.Handler;
21 20
import android.os.Message;
22 21
import android.provider.MediaStore;
@ -71,11 +70,13 @@ import com.amap.api.services.geocoder.RegeocodeResult;
71 70
import com.electric.chargingpile.R;
72 71
import com.electric.chargingpile.application.MainApplication;
73 72
import com.electric.chargingpile.data.Zhan;
73
import com.electric.chargingpile.engine.GlideEngine;
74 74
import com.electric.chargingpile.util.Bimp;
75 75
import com.electric.chargingpile.util.DES3;
76 76
import com.electric.chargingpile.util.FileUtils;
77 77
import com.electric.chargingpile.util.ImageItem;
78 78
import com.electric.chargingpile.util.OkHttpUtil;
79
import com.electric.chargingpile.util.PhotoUtils;
79 80
import com.electric.chargingpile.util.PublicWay;
80 81
import com.electric.chargingpile.util.Res;
81 82
import com.electric.chargingpile.util.SharedPreferencesUtil;
@ -88,9 +89,15 @@ import com.google.android.gms.appindexing.Action;
88 89
import com.google.android.gms.appindexing.AppIndex;
89 90
import com.google.android.gms.appindexing.Thing;
90 91
import com.google.android.gms.common.api.GoogleApiClient;
92
import com.luck.picture.lib.PictureSelector;
93
import com.luck.picture.lib.animators.AnimationType;
94
import com.luck.picture.lib.config.PictureConfig;
95
import com.luck.picture.lib.config.PictureMimeType;
96
import com.luck.picture.lib.entity.LocalMedia;
91 97
import com.squareup.okhttp.Request;
92 98
import com.squareup.okhttp.Response;
93 99
import com.umeng.analytics.MobclickAgent;
100
import com.yalantis.ucrop.view.OverlayView;
94 101
95 102
import org.json.JSONException;
96 103
import org.json.JSONObject;
@ -122,11 +129,11 @@ public class ClaimSurveyTwoActivity extends Activity implements View.OnClickList
122 129
    private String camePath;//拍照路径
123 130
    //    private LocationMode mCurrentMode;
124 131
    private static final String PHOTO_FILE_NAME = "android.jpg";
125
    private static final String PHOTO_FILE_PATH = getPath(Environment.getExternalStorageDirectory() + "/" + "cdz");
132
    private static final String PHOTO_FILE_PATH = getPath(PhotoUtils.CACHE_DIR);
126 133
    private File tempFile;
127 134
    private static final int PHOTO_REQUEST_CAMERA = 1;
128 135
    private static final int PHOTO_REQUEST_GALLERY = 2;
129
    private static final int PHOTO_REQUEST_CUT = 3;
136
130 137
    private String gd_jing, gd_wei;
131 138
    String ls_jing, ls_wei;
132 139
    private boolean isTouch = false;
@ -369,11 +376,12 @@ public class ClaimSurveyTwoActivity extends Activity implements View.OnClickList
369 376
        });
370 377
        bt2.setOnClickListener(new View.OnClickListener() {
371 378
            public void onClick(View v) {
372
                Intent intent = new Intent(ClaimSurveyTwoActivity.this,
373
                        AlbumActivity4claim.class);
374
                startActivity(intent);
375
                overridePendingTransition(R.anim.activity_translate_in, R.anim.activity_translate_out);
379
//                Intent intent = new Intent(ClaimSurveyTwoActivity.this,
380
//                        AlbumActivity4claim.class);
381
//                startActivity(intent);
382
//                overridePendingTransition(R.anim.activity_translate_in, R.anim.activity_translate_out);
376 383
//                startActivityForResult(intent, 1);
384
                openPhotoAlbum();
377 385
                pop.dismiss();
378 386
                ll_popup.clearAnimation();
379 387
            }
@ -1817,34 +1825,69 @@ public class ClaimSurveyTwoActivity extends Activity implements View.OnClickList
1817 1825
1818 1826
    private static final int TAKE_PICTURE = 0x000001;
1819 1827
1820
//    public void photo() {
1821
//        Intent openCameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
1822
//        startActivityForResult(openCameraIntent, TAKE_PICTURE);
1823
////        Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
1824
////        File file = new File(Environment.getExternalStorageDirectory() + "/myimage/", String.valueOf(System
1825
////                .currentTimeMillis()) + ".jpg");
1826
////        camePath = file.getPath();
1827
////        Uri imageUri = Uri.fromFile(file);
1828
////        intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);
1829
////        startActivityForResult(intent, TAKE_PICTURE);
1830
//    }
1828
1831 1829
1832 1830
    public void photo() {
1833
//		Intent openCameraIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
1834
//		startActivityForResult(openCameraIntent, TAKE_PICTURE);
1835
//        Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
1836
//        File file = new File(Environment.getExternalStorageDirectory() + "/myimage/", String.valueOf(System
1837
//                .currentTimeMillis()) + ".jpg");
1838
//        camePath = file.getPath();
1839
//        Uri imageUri = Uri.fromFile(file);
1840
//        intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);
1841
//        startActivityForResult(intent, TAKE_PICTURE);
1842
        if (hasSdcard()) {
1843
            Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);//���������
1844
            intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(tempFile));
1845
//            intent.putExtra(MediaStore.EXTRA_OUTPUT, cutImgUri);
1846
            startActivityForResult(intent, PHOTO_REQUEST_CAMERA);
1847
        }
1831
        PictureSelector.create(this)
1832
                .openCamera(PictureMimeType.ofImage())
1833
                .selectionMode(PictureConfig.SINGLE)
1834
                .isSingleDirectReturn(true)
1835
                .isCompress(true)//是否压缩
1836
                .isPreviewEggs(true)//预览图片时是否增强左右滑动图片体验
1837
                .isGif(false)//是否显示gif
1838
                .isAndroidQTransform(true)
1839
                .imageEngine(GlideEngine.createGlideEngine())
1840
                .isWeChatStyle(false)// 是否开启微信图片选择风格
1841
                .isUseCustomCamera(false)// 是否使用自定义相机
1842
                .isPageStrategy(true)// 是否开启分页策略 & 每页多少条;默认开启
1843
                .setPictureStyle(Util.getWhiteStyle(this))// 动态自定义相册主题
1844
                .setRecyclerAnimationMode(AnimationType.SLIDE_IN_BOTTOM_ANIMATION)// 列表动画效果
1845
                .isMaxSelectEnabledMask(true)// 选择数到了最大阀值列表是否启用蒙层效果
1846
                .imageSpanCount(4)// 每行显示个数
1847
                .isReturnEmpty(false)// 未选择数据时点击按钮是否可以返回
1848
                .isAutomaticTitleRecyclerTop(true)//图片列表超过一屏连续点击顶部标题栏快速回滚至顶部
1849
                .isEnableCrop(true)
1850
                .rotateEnabled(false)//裁剪是否可旋转图片
1851
                .freeStyleCropMode(OverlayView.DEFAULT_FREESTYLE_CROP_MODE)// 裁剪框拖动模式
1852
                .isCropDragSmoothToCenter(true)// 裁剪框拖动时图片自动跟随居中
1853
                .circleDimmedLayer(false)// 是否开启圆形裁剪
1854
                .isDragFrame(true)//是否可拖动裁剪框(固定)
1855
                .showCropFrame(true)// 是否显示裁剪矩形边框 圆形裁剪时建议设为false
1856
                .showCropGrid(true)//是否显示裁剪矩形网格 圆形裁剪时建议设为false
1857
                .forResult(PHOTO_REQUEST_CAMERA);
1858
1859
    }
1860
    private void openPhotoAlbum() {
1861
        PictureSelector.create(this)
1862
                .openGallery(PictureMimeType.ofImage())
1863
                .isCamera(false)//列表是否显示拍照按钮
1864
                .selectionMode(PictureConfig.SINGLE)
1865
                .isSingleDirectReturn(true)//PictureConfig.SINGLE模式下是否直接返回
1866
                .isCompress(true)//是否压缩
1867
                .isPreviewEggs(true)//预览图片时是否增强左右滑动图片体验
1868
                .isGif(false)//是否显示gif
1869
                .isAndroidQTransform(true)
1870
                .imageEngine(GlideEngine.createGlideEngine())
1871
                .isWeChatStyle(false)// 是否开启微信图片选择风格
1872
                .isUseCustomCamera(false)// 是否使用自定义相机
1873
                .isPageStrategy(true)// 是否开启分页策略 & 每页多少条;默认开启
1874
                .setPictureStyle(Util.getWhiteStyle(this))// 动态自定义相册主题
1875
                .setRecyclerAnimationMode(AnimationType.SLIDE_IN_BOTTOM_ANIMATION)// 列表动画效果
1876
                .isMaxSelectEnabledMask(true)// 选择数到了最大阀值列表是否启用蒙层效果
1877
                .imageSpanCount(4)// 每行显示个数
1878
                .isReturnEmpty(false)// 未选择数据时点击按钮是否可以返回
1879
                .isAutomaticTitleRecyclerTop(true)//图片列表超过一屏连续点击顶部标题栏快速回滚至顶部
1880
                .rotateEnabled(false)//裁剪是否可旋转图片
1881
                .isEnableCrop(true)
1882
                .rotateEnabled(false)//裁剪是否可旋转图片
1883
                .setCircleStrokeWidth(8)//设置圆形裁剪边框粗细
1884
                .freeStyleCropMode(OverlayView.DEFAULT_FREESTYLE_CROP_MODE)// 裁剪框拖动模式
1885
                .isCropDragSmoothToCenter(true)// 裁剪框拖动时图片自动跟随居中
1886
                .circleDimmedLayer(true)// 是否开启圆形裁剪
1887
                .isDragFrame(true)//是否可拖动裁剪框(固定)
1888
                .showCropFrame(false)// 是否显示裁剪矩形边框 圆形裁剪时建议设为false
1889
                .showCropGrid(false)//是否显示裁剪矩形网格 圆形裁剪时建议设为false
1890
                .forResult(PHOTO_REQUEST_GALLERY);
1848 1891
    }
1849 1892
1850 1893
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
@ -1861,23 +1904,27 @@ public class ClaimSurveyTwoActivity extends Activity implements View.OnClickList
1861 1904
        }
1862 1905
        System.out.println("--------data------->" + data);
1863 1906
        //���ѡȡ
1864
        if (requestCode == PHOTO_REQUEST_CAMERA && resultCode == Activity.RESULT_OK) {
1865
            //��������ͼƬ�ͽ�ȡ���ͼƬ�ļ���д����ͬһ���ļ���photo.jpg
1866
            crop(Uri.fromFile(tempFile), Uri.fromFile(tempFile));
1867
        }
1868
        //���ؽ�ȡ��ͼƬ
1869
        else if (requestCode == PHOTO_REQUEST_CUT && data != null) {
1870
            //���д�ͼʹ��Uri
1871
            Bitmap bitmap = decodeUriAsBitmap(Uri.fromFile(tempFile));//decode bitmap
1872
//            mFace.setImageBitmap(bitmap);
1873
            String fileName = String.valueOf(System.currentTimeMillis());
1874
            ImageItem takePhoto = new ImageItem();
1875
            takePhoto.setBitmap(bitmap);
1876
            takePhoto.setImagePath(FileUtils.SDPATH + fileName + ".JPEG");
1877
            Bimp.tempSelectBitmap.add(takePhoto);
1878
        } else {
1879
//            Toast.makeText(getApplicationContext(), "��ȡͼƬʧ��", Toast.LENGTH_SHORT).show();
1907
        if (resultCode == Activity.RESULT_OK){
1908
            if (requestCode == PHOTO_REQUEST_CAMERA || requestCode == PHOTO_REQUEST_GALLERY) {
1909
                List<LocalMedia> medias = PictureSelector.obtainMultipleResult(data);
1910
                if (medias != null && medias.size() > 0) {
1911
                    String path = "";
1912
                    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
1913
                        path = medias.get(0).getAndroidQToPath();
1914
                    } else {
1915
                        path = medias.get(0).getPath();
1916
                    }
1917
                    Bitmap bitmap = BitmapFactory.decodeFile(path);
1918
                    ImageItem takePhoto = new ImageItem();
1919
                    takePhoto.setBitmap(bitmap);
1920
                    takePhoto.setImagePath(path);
1921
                    Bimp.tempSelectBitmap.add(takePhoto);
1922
                }
1923
1924
            }
1925
1880 1926
        }
1927
1881 1928
        super.onActivityResult(requestCode, resultCode, data);
1882 1929
    }
1883 1930
@ -2026,35 +2073,6 @@ public class ClaimSurveyTwoActivity extends Activity implements View.OnClickList
2026 2073
//        bdLocation.recycle();
2027 2074
    }
2028 2075
2029
    private void crop(Uri uri, Uri cutImgUri) {
2030
        // �ü�ͼƬ��ͼ
2031
        Intent intent = new Intent("com.android.camera.action.CROP");
2032
        intent.setDataAndType(uri, "image/*");
2033
        intent.putExtra("crop", "true");
2034
        // �ü���ı�����1��1
2035
//        intent.putExtra("aspectX", 4);
2036
//        intent.putExtra("aspectY", 3);
2037
        // �ü������ͼƬ�ijߴ��С
2038
//        intent.putExtra("outputX", 400);
2039
//        intent.putExtra("outputY", 300);
2040
2041
        // ͼƬ��ʽ
2042
        intent.putExtra("outputFormat", "JPEG");
2043
        intent.putExtra("noFaceDetection", true);// ȡ������ʶ��
2044
        intent.putExtra("return-data", false);// true:������uri��false������uri
2045
        intent.putExtra(MediaStore.EXTRA_OUTPUT, cutImgUri);//д���ȡ��ͼƬ
2046
        startActivityForResult(intent, PHOTO_REQUEST_CUT);
2047
    }
2048
2049
    private boolean hasSdcard() {
2050
        if (Environment.getExternalStorageState().equals(
2051
                Environment.MEDIA_MOUNTED)) {
2052
            return true;
2053
        } else {
2054
            return false;
2055
        }
2056
    }
2057
2058 2076
    private static String getPath(String path) {
2059 2077
        File f = new File(path);
2060 2078
        if (!f.exists()) {

+ 7 - 26
app/src/main/java/com/electric/chargingpile/activity/CompletePhotoActivity.java

@ -1,31 +1,12 @@
1 1
package com.electric.chargingpile.activity;
2 2

3 3
import android.app.Activity;
4
import android.app.AlertDialog;
5
import android.content.ContentResolver;
6
import android.content.DialogInterface;
7
import android.content.Intent;
8
import android.database.Cursor;
9
import android.graphics.Bitmap;
10
import android.graphics.BitmapFactory;
11
import android.net.Uri;
12
import android.os.Bundle;
13
import android.os.Environment;
14
import android.provider.MediaStore;
15
import android.text.TextUtils;
16
import android.util.Log;
17
import android.view.View;
18
import android.widget.ImageView;
19
import android.widget.LinearLayout;
20

21
import com.electric.chargingpile.R;
22
import com.electric.chargingpile.util.ImageTools;
23

24
import java.io.File;
25

26

27
public class CompletePhotoActivity extends Activity implements View.OnClickListener {
28
    LinearLayout ll_addMore_photo;
4
/**
5
 * 已废弃
6
 * */
7
@Deprecated
8
public class CompletePhotoActivity extends Activity {
9
 /*   LinearLayout ll_addMore_photo;
29 10
    private static String srcPath = "";
30 11
    private ImageView image, updatePhoto_moveback;
31 12
    private File mPhotoFile;
@ -169,5 +150,5 @@ public class CompletePhotoActivity extends Activity implements View.OnClickListe
169 150
                image.setImageBitmap(BitmapFactory.decodeFile(srcPath));
170 151
            }
171 152
        }
172
    }
153
    }*/
173 154
}

+ 58 - 23
app/src/main/java/com/electric/chargingpile/activity/EditAnswerActivity.java

@ -7,12 +7,9 @@ import android.content.Intent;
7 7
import android.graphics.Bitmap;
8 8
import android.graphics.BitmapFactory;
9 9
import android.graphics.Matrix;
10
import android.net.Uri;
10
import android.os.Build;
11 11
import android.os.Bundle;
12 12
import android.os.Handler;
13
14
import androidx.appcompat.app.AppCompatActivity;
15
16 13
import android.util.DisplayMetrics;
17 14
import android.util.Log;
18 15
import android.util.TypedValue;
@ -27,31 +24,31 @@ import android.widget.RelativeLayout;
27 24
import android.widget.TextView;
28 25
import android.widget.Toast;
29 26
27
import androidx.appcompat.app.AppCompatActivity;
28
30 29
import com.electric.chargingpile.R;
31 30
import com.electric.chargingpile.application.MainApplication;
31
import com.electric.chargingpile.engine.GlideEngine;
32 32
import com.electric.chargingpile.util.AndroidBug5497Workaround;
33 33
import com.electric.chargingpile.util.BarColorUtil;
34 34
import com.electric.chargingpile.util.FileUtils;
35
import com.electric.chargingpile.util.ImageItem;
36 35
import com.electric.chargingpile.util.ImageUitl;
37
import com.electric.chargingpile.util.ImageUtils;
38 36
import com.electric.chargingpile.util.JsonUtils;
39
import com.electric.chargingpile.util.ScreenUtils;
40 37
import com.electric.chargingpile.util.StringUtils;
41 38
import com.electric.chargingpile.util.ToastUtil;
42
import com.electric.chargingpile.view.CarTypeDialog;
39
import com.electric.chargingpile.util.Util;
43 40
import com.electric.chargingpile.view.xrichtext.RichTextEditorForA;
44 41
import com.electric.chargingpile.view.xrichtext.SDCardUtil;
45
import com.zhihu.matisse.Matisse;
46
import com.zhihu.matisse.MimeType;
47
import com.zhihu.matisse.engine.impl.GlideEngine;
48
import com.zhihu.matisse.internal.entity.CaptureStrategy;
42
import com.luck.picture.lib.PictureSelector;
43
import com.luck.picture.lib.animators.AnimationType;
44
import com.luck.picture.lib.config.PictureConfig;
45
import com.luck.picture.lib.config.PictureMimeType;
46
import com.luck.picture.lib.entity.LocalMedia;
49 47
import com.zhy.http.okhttp.OkHttpUtils;
50 48
import com.zhy.http.okhttp.callback.StringCallback;
51 49
52 50
import java.io.ByteArrayOutputStream;
53 51
import java.io.File;
54
import java.util.ArrayList;
55 52
import java.util.HashMap;
56 53
import java.util.Iterator;
57 54
import java.util.List;
@ -333,19 +330,33 @@ public class EditAnswerActivity extends AppCompatActivity implements View.OnClic
333 330
334 331
                try {
335 332
                    et_new_content.measure(0, 0);
336
                    List<Uri> uriList = Matisse.obtainResult(data);
337
                    Uri uri = uriList.get(0);
338
                    Bitmap bitmap = BitmapFactory.decodeStream(getContentResolver().openInputStream(uri));
339
                    File file = FileUtils.from(EditAnswerActivity.this, uri);
333
//                    List<Uri> uriList = Matisse.obtainResult(data);
334
                   List<LocalMedia> selectionData= PictureSelector.obtainMultipleResult(data);
335
                    if (selectionData!=null && selectionData.size()>0){
336
                        LocalMedia media = selectionData.get(0);
337
338
//                        Uri uri = uriList.get(0);
339
//                        Bitmap bitmap = BitmapFactory.decodeStream(getContentResolver().openInputStream(uri));
340
//                        File file = FileUtils.from(EditAnswerActivity.this, uri);
341
//
342
//                        bitmap = FileUtils.rotateIfRequired(file, bitmap);
343
//                        bitmap = imageZoom(bitmap);
344
                        String path="";
345
                        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q){
346
                            path= media.getAndroidQToPath();
347
                        }else{
348
                            path=media.getPath();
349
                        }
350
                        insertBitmap = imageZoom(BitmapFactory.decodeFile(path));
340 351
341
                    bitmap = FileUtils.rotateIfRequired(file, bitmap);
342
                    bitmap = imageZoom(bitmap);
343
                    insertBitmap = bitmap;
352
                        u_path = path;
344 353
345
                    u_path = SDCardUtil.saveToSdCard(bitmap);
354
                        subscriber.onNext(u_path);
355
                        subscriber.onComplete();
356
                    }else{
357
                        subscriber.onError(new Exception());
358
                    }
346 359
347
                    subscriber.onNext(u_path);
348
                    subscriber.onComplete();
349 360
                } catch (Exception e) {
350 361
                    e.printStackTrace();
351 362
                    subscriber.onError(e);
@ -502,6 +513,7 @@ public class EditAnswerActivity extends AppCompatActivity implements View.OnClic
502 513
     * 调用图库选择
503 514
     */
504 515
    private void callGallery() {
516
/*
505 517
        Matisse.from(EditAnswerActivity.this)
506 518
                .choose(MimeType.of(MimeType.JPEG, MimeType.PNG, MimeType.GIF))
507 519
                .showSingleMediaType(true)
@ -511,6 +523,29 @@ public class EditAnswerActivity extends AppCompatActivity implements View.OnClic
511 523
                .captureStrategy(new CaptureStrategy(true, "com.electric.chargingpile.provider"))
512 524
                .imageEngine(new GlideEngine())
513 525
                .forResult(REQUEST_CODE_CHOOSE);
526
*/
527
528
        PictureSelector.create(this)
529
                .openGallery(PictureMimeType.ofImage())
530
                .maxSelectNum(1)
531
                .selectionMode(PictureConfig.SINGLE)
532
                .isSingleDirectReturn(true)
533
                .isCompress(true)//是否压缩
534
                .isPreviewEggs(true)//预览图片时是否增强左右滑动图片体验
535
                .isGif(true)//是否显示gif
536
                .isAndroidQTransform(true)
537
                .imageEngine(GlideEngine.createGlideEngine())
538
                .isWeChatStyle(false)// 是否开启微信图片选择风格
539
                .isUseCustomCamera(false)// 是否使用自定义相机
540
                .isPageStrategy(true)// 是否开启分页策略 & 每页多少条;默认开启
541
                .setPictureStyle(Util.getWhiteStyle(this))// 动态自定义相册主题
542
                .setRecyclerAnimationMode(AnimationType.SLIDE_IN_BOTTOM_ANIMATION)// 列表动画效果
543
                .isMaxSelectEnabledMask(true)// 选择数到了最大阀值列表是否启用蒙层效果
544
                .imageSpanCount(4)// 每行显示个数
545
                .isReturnEmpty(false)// 未选择数据时点击按钮是否可以返回
546
                .isAutomaticTitleRecyclerTop(true)//图片列表超过一屏连续点击顶部标题栏快速回滚至顶部
547
                .forResult(REQUEST_CODE_CHOOSE);
548
514 549
    }
515 550
516 551
    @Override

+ 63 - 22
app/src/main/java/com/electric/chargingpile/activity/EditQuestionTwoActivity.java

@ -8,6 +8,7 @@ import android.graphics.Bitmap;
8 8
import android.graphics.BitmapFactory;
9 9
import android.graphics.Matrix;
10 10
import android.net.Uri;
11
import android.os.Build;
11 12
import android.os.Bundle;
12 13
import android.os.Handler;
13 14
@ -27,6 +28,7 @@ import android.widget.Toast;
27 28
28 29
import com.electric.chargingpile.R;
29 30
import com.electric.chargingpile.application.MainApplication;
31
import com.electric.chargingpile.engine.GlideEngine;
30 32
import com.electric.chargingpile.util.AndroidBug5497Workaround;
31 33
import com.electric.chargingpile.util.BarColorUtil;
32 34
import com.electric.chargingpile.util.FileUtils;
@ -35,14 +37,17 @@ import com.electric.chargingpile.util.JsonUtils;
35 37
import com.electric.chargingpile.util.ScreenUtils;
36 38
import com.electric.chargingpile.util.StringUtils;
37 39
import com.electric.chargingpile.util.ToastUtil;
40
import com.electric.chargingpile.util.Util;
38 41
import com.electric.chargingpile.view.CarTypeDialog;
39 42
import com.electric.chargingpile.view.xrichtext.RichTextEditor;
40 43
import com.electric.chargingpile.view.xrichtext.SDCardUtil;
44
import com.luck.picture.lib.PictureSelector;
45
import com.luck.picture.lib.animators.AnimationType;
46
import com.luck.picture.lib.config.PictureConfig;
47
import com.luck.picture.lib.config.PictureMimeType;
48
import com.luck.picture.lib.entity.LocalMedia;
41 49
import com.umeng.analytics.MobclickAgent;
42
import com.zhihu.matisse.Matisse;
43
import com.zhihu.matisse.MimeType;
44
import com.zhihu.matisse.engine.impl.GlideEngine;
45
import com.zhihu.matisse.internal.entity.CaptureStrategy;
50
46 51
import com.zhy.http.okhttp.OkHttpUtils;
47 52
import com.zhy.http.okhttp.callback.StringCallback;
48 53
@ -353,19 +358,33 @@ public class EditQuestionTwoActivity extends AppCompatActivity implements View.O
353 358
354 359
                try {
355 360
                    et_new_content.measure(0, 0);
356
                    List<Uri> uriList = Matisse.obtainResult(data);
357
                    Uri uri = uriList.get(0);
358
                    Bitmap bitmap = BitmapFactory.decodeStream(getContentResolver().openInputStream(uri));
359
                    File file = FileUtils.from(EditQuestionTwoActivity.this, uri);
361
                    List<LocalMedia> selectionData= PictureSelector.obtainMultipleResult(data);
362
                    if (selectionData!=null && selectionData.size()>0) {
363
                        LocalMedia media = selectionData.get(0);
364
                        /*List<Uri> uriList = Matisse.obtainResult(data);
365
                        Uri uri = uriList.get(0);
366
                        Bitmap bitmap = BitmapFactory.decodeStream(getContentResolver().openInputStream(uri));
367
                        File file = FileUtils.from(EditQuestionTwoActivity.this, uri);
368
369
                        bitmap = FileUtils.rotateIfRequired(file, bitmap);
370
                        bitmap = imageZoom(bitmap);
371
                        insertBitmap = bitmap;*/
372
                        String path="";
373
                        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q){
374
                            path= media.getAndroidQToPath();
375
                        }else{
376
                            path=media.getPath();
377
                        }
378
                        insertBitmap = imageZoom(BitmapFactory.decodeFile(path));
360 379
361
                    bitmap = FileUtils.rotateIfRequired(file, bitmap);
362
                    bitmap = imageZoom(bitmap);
363
                    insertBitmap = bitmap;
380
                        u_path = path;
364 381
365
                    u_path = SDCardUtil.saveToSdCard(bitmap);
382
                        subscriber.onNext(u_path);
383
                        subscriber.onComplete();
384
                    }else{
385
                        subscriber.onError(new Exception());
386
                    }
366 387
367
                    subscriber.onNext(u_path);
368
                    subscriber.onComplete();
369 388
                } catch (Exception e) {
370 389
                    e.printStackTrace();
371 390
                    subscriber.onError(e);
@ -531,15 +550,37 @@ public class EditQuestionTwoActivity extends AppCompatActivity implements View.O
531 550
     * 调用图库选择
532 551
     */
533 552
    private void callGallery() {
534
        Matisse.from(EditQuestionTwoActivity.this)
535
                .choose(MimeType.of(MimeType.JPEG, MimeType.PNG, MimeType.GIF))
536
                .showSingleMediaType(true)
537
                .countable(true)
538
                .maxSelectable(1)
539
                .capture(true)
540
                .captureStrategy(new CaptureStrategy(true, "com.electric.chargingpile.provider"))
541
                .imageEngine(new GlideEngine())
553
//        Matisse.from(EditQuestionTwoActivity.this)
554
//                .choose(MimeType.of(MimeType.JPEG, MimeType.PNG, MimeType.GIF))
555
//                .showSingleMediaType(true)
556
//                .countable(true)
557
//                .maxSelectable(1)
558
//                .capture(true)
559
//                .captureStrategy(new CaptureStrategy(true, "com.electric.chargingpile.provider"))
560
//                .imageEngine(new GlideEngine())
561
//                .forResult(REQUEST_CODE_CHOOSE);
562
563
        PictureSelector.create(this)
564
                .openGallery(PictureMimeType.ofImage())
565
                .maxSelectNum(1)
566
                .selectionMode(PictureConfig.SINGLE)
567
                .isSingleDirectReturn(true)
568
                .isCompress(true)//是否压缩
569
                .isPreviewEggs(true)//预览图片时是否增强左右滑动图片体验
570
                .isGif(true)//是否显示gif
571
                .isAndroidQTransform(true)
572
                .imageEngine(GlideEngine.createGlideEngine())
573
                .isWeChatStyle(false)// 是否开启微信图片选择风格
574
                .isUseCustomCamera(false)// 是否使用自定义相机
575
                .isPageStrategy(true)// 是否开启分页策略 & 每页多少条;默认开启
576
                .setPictureStyle(Util.getWhiteStyle(this))// 动态自定义相册主题
577
                .setRecyclerAnimationMode(AnimationType.SLIDE_IN_BOTTOM_ANIMATION)// 列表动画效果
578
                .isMaxSelectEnabledMask(true)// 选择数到了最大阀值列表是否启用蒙层效果
579
                .imageSpanCount(4)// 每行显示个数
580
                .isReturnEmpty(false)// 未选择数据时点击按钮是否可以返回
581
                .isAutomaticTitleRecyclerTop(true)//图片列表超过一屏连续点击顶部标题栏快速回滚至顶部
542 582
                .forResult(REQUEST_CODE_CHOOSE);
583
543 584
    }
544 585
545 586
    @Override

+ 53 - 168
app/src/main/java/com/electric/chargingpile/activity/FeedbackActivity.java

@ -16,10 +16,11 @@ import android.graphics.drawable.ColorDrawable;
16 16
import android.net.Uri;
17 17
import android.os.Build;
18 18
import android.os.Bundle;
19
import android.os.Environment;
19

20

20 21
import android.os.Handler;
21 22
import android.os.Message;
22
import android.provider.MediaStore;
23

23 24
import android.text.Editable;
24 25
import android.text.TextWatcher;
25 26
import android.util.Base64;
@ -45,6 +46,7 @@ import android.widget.Toast;
45 46
import com.electric.chargingpile.R;
46 47
import com.electric.chargingpile.application.MainApplication;
47 48
import com.electric.chargingpile.data.UploadPic;
49
import com.electric.chargingpile.engine.GlideEngine;
48 50
import com.electric.chargingpile.util.BarColorUtil;
49 51
import com.electric.chargingpile.util.Bimp;
50 52
import com.electric.chargingpile.util.FileUtils;
@ -56,11 +58,13 @@ import com.electric.chargingpile.util.Res;
56 58
import com.electric.chargingpile.util.ToastUtil;
57 59
import com.electric.chargingpile.util.UploadUtil;
58 60
import com.electric.chargingpile.util.Util;
61
import com.luck.picture.lib.PictureSelector;
62
import com.luck.picture.lib.animators.AnimationType;
63
import com.luck.picture.lib.config.PictureConfig;
64
import com.luck.picture.lib.config.PictureMimeType;
65
import com.luck.picture.lib.entity.LocalMedia;
59 66
import com.umeng.analytics.MobclickAgent;
60
import com.zhihu.matisse.Matisse;
61
import com.zhihu.matisse.MimeType;
62
import com.zhihu.matisse.engine.impl.GlideEngine;
63
import com.zhihu.matisse.internal.entity.CaptureStrategy;
67

64 68
import com.zhy.http.okhttp.OkHttpUtils;
65 69
import com.zhy.http.okhttp.callback.StringCallback;
66 70

@ -89,12 +93,11 @@ public class FeedbackActivity extends Activity implements OnClickListener, EasyP
89 93
    private static final int PIC_NUM = 3;
90 94
    private ImageView ivBack;
91 95
    private TextView tv_right;
92
    private static String PHOTO_FILE_NAME = "";
93
    private static final String PHOTO_FILE_PATH = getPath(Environment.getExternalStorageDirectory() + "/" + "cdz");
96

97

94 98
    private GridView noScrollgridview;
95
    private PopupWindow pop = null;
96
    private LinearLayout ll_popup;
97
    private File tempFile;
99

100

98 101
    Bitmap bm = null;
99 102
    private static final int PHOTO_REQUEST_CAMERA = 1;
100 103
    private static final int PHOTO_REQUEST_GALLERY = 2;
@ -134,7 +137,7 @@ public class FeedbackActivity extends Activity implements OnClickListener, EasyP
134 137
        }
135 138
    };
136 139

137

140
    private List<LocalMedia> mSelectionData =new ArrayList<LocalMedia>();
138 141
    @Override
139 142
    protected void onCreate(Bundle savedInstanceState) {
140 143
        super.onCreate(savedInstanceState);
@ -143,9 +146,6 @@ public class FeedbackActivity extends Activity implements OnClickListener, EasyP
143 146
        initView();
144 147
        Res.init(this);
145 148
        PublicWay.activityList.add(this);
146
        long appTime1 = System.currentTimeMillis() / 1000;
147
        PHOTO_FILE_NAME = "android" + appTime1 + ".jpg";
148
        tempFile = getFile(PHOTO_FILE_PATH + "/" + PHOTO_FILE_NAME);
149 149
        dialog = new LoadingDialog(this);
150 150
        dialog.setCanceledOnTouchOutside(false);
151 151
        Init();
@ -271,95 +271,7 @@ public class FeedbackActivity extends Activity implements OnClickListener, EasyP
271 271
        return f;
272 272
    }
273 273

274
    private static String getPath(String path) {
275
        File f = new File(path);
276
        if (!f.exists()) {
277
            f.mkdirs();
278
        }
279
        return f.getAbsolutePath();
280
    }
281

282
    private boolean hasSdcard() {
283
        if (Environment.getExternalStorageState().equals(
284
                Environment.MEDIA_MOUNTED)) {
285
            return true;
286
        } else {
287
            return false;
288
        }
289
    }
290

291 274
    public void Init() {
292
        pop = new PopupWindow(FeedbackActivity.this);
293
        View view = getLayoutInflater().inflate(R.layout.item_popupwindows, null);
294
        ll_popup = (LinearLayout) view.findViewById(R.id.ll_popup);
295

296
        pop.setWidth(ViewGroup.LayoutParams.MATCH_PARENT);
297
        pop.setHeight(ViewGroup.LayoutParams.WRAP_CONTENT);
298
        pop.setBackgroundDrawable(new BitmapDrawable());
299
        pop.setFocusable(true);
300
        pop.setOutsideTouchable(true);
301
        pop.setContentView(view);
302

303

304
        final RelativeLayout parent = (RelativeLayout) view.findViewById(R.id.parent);
305
        Button bt1 = (Button) view
306
                .findViewById(R.id.item_popupwindows_camera);
307
        Button bt2 = (Button) view
308
                .findViewById(R.id.item_popupwindows_Photo);
309
        Button bt3 = (Button) view
310
                .findViewById(R.id.item_popupwindows_cancel);
311
        parent.setOnClickListener(new View.OnClickListener() {
312

313
            @Override
314
            public void onClick(View v) {
315
                // TODO Auto-generated method stub
316
                pop.dismiss();
317
                ll_popup.clearAnimation();
318
            }
319
        });
320
        bt1.setOnClickListener(new View.OnClickListener() {
321
            public void onClick(View v) {
322
                pop.dismiss();
323
                ll_popup.clearAnimation();
324
                if (MainScanActivity.isCameraUseable()) {
325
                    photo();
326
                } else {
327
                    ToastUtil.showToast(getApplicationContext(), "您当前关闭了调用摄像头权限", Toast.LENGTH_SHORT);
328
//					new AlertDialogTwo(FeedbackActivity.this).builder()
329
//							.setMsg("您当前关闭了调用摄像头权限,是否去打开?")
330
//							.setPositiveButton("去打开", new View.OnClickListener() {
331
//								@Override
332
//								public void onClick(View v) {
333
//									Intent intent = new Intent(Settings.ACTION_SETTINGS);
334
//									startActivity(intent);
335
//								}
336
//							}).setNegativeButton("忽略", new View.OnClickListener() {
337
//						@Override
338
//						public void onClick(View v) {
339
//
340
//						}
341
//					}).show();
342
                }
343
            }
344
        });
345
        bt2.setOnClickListener(new View.OnClickListener() {
346
            public void onClick(View v) {
347
                Intent intent = new Intent(FeedbackActivity.this,
348
                        AlbumActivityFeedback.class);
349
                startActivity(intent);
350
                overridePendingTransition(R.anim.activity_translate_in, R.anim.activity_translate_out);
351
//                startActivityForResult(intent, 1);
352
                pop.dismiss();
353
                ll_popup.clearAnimation();
354
            }
355
        });
356
        bt3.setOnClickListener(new View.OnClickListener() {
357
            public void onClick(View v) {
358
                pop.dismiss();
359
                ll_popup.clearAnimation();
360
            }
361
        });
362

363 275
        noScrollgridview = (GridView) findViewById(R.id.noScrollgridview);
364 276
        noScrollgridview.setSelector(new ColorDrawable(Color.TRANSPARENT));
365 277
        adapter = new GridAdapter(this);
@ -387,6 +299,7 @@ public class FeedbackActivity extends Activity implements OnClickListener, EasyP
387 299
     * 调用图库选择
388 300
     */
389 301
    private void callGallery() {
302
/*
390 303
        Matisse.from(FeedbackActivity.this)
391 304
                .choose(MimeType.of(MimeType.JPEG, MimeType.PNG, MimeType.GIF))
392 305
                .showSingleMediaType(true)
@ -396,6 +309,28 @@ public class FeedbackActivity extends Activity implements OnClickListener, EasyP
396 309
                .captureStrategy(new CaptureStrategy(true, "com.electric.chargingpile.provider"))
397 310
                .imageEngine(new GlideEngine())
398 311
                .forResult(REQUEST_CODE_CHOOSE);
312
*/
313

314
        PictureSelector.create(this)
315
                .openGallery(PictureMimeType.ofImage())
316
                .maxSelectNum(PIC_NUM)
317
                .selectionMode(PictureConfig.MULTIPLE)
318
                .selectionData(mSelectionData)//是否传入已选图片
319
                .isCompress(true)//是否压缩
320
                .isPreviewEggs(true)//预览图片时是否增强左右滑动图片体验
321
                .isGif(true)//是否显示gif
322
                .isAndroidQTransform(true)
323
                .imageEngine(GlideEngine.createGlideEngine())
324
                .isWeChatStyle(false)// 是否开启微信图片选择风格
325
                .isUseCustomCamera(false)// 是否使用自定义相机
326
                .isPageStrategy(true)// 是否开启分页策略 & 每页多少条;默认开启
327
                .setPictureStyle(Util.getWhiteStyle(this))// 动态自定义相册主题
328
                .setRecyclerAnimationMode(AnimationType.SLIDE_IN_BOTTOM_ANIMATION)// 列表动画效果
329
                .isMaxSelectEnabledMask(true)// 选择数到了最大阀值列表是否启用蒙层效果
330
                .imageSpanCount(4)// 每行显示个数
331
                .isReturnEmpty(false)// 未选择数据时点击按钮是否可以返回
332
                .isAutomaticTitleRecyclerTop(true)//图片列表超过一屏连续点击顶部标题栏快速回滚至顶部
333
                .forResult(REQUEST_CODE_CHOOSE);
399 334

400 335

401 336
    }
@ -427,15 +362,22 @@ public class FeedbackActivity extends Activity implements OnClickListener, EasyP
427 362
            public void subscribe(ObservableEmitter<String> subscriber) throws Exception {
428 363

429 364
                try {
430
                    List<Uri> uriList = Matisse.obtainResult(data);
431
                    for (Uri uri: uriList) {
432
                        Bitmap bitmap = BitmapFactory.decodeStream(getContentResolver().openInputStream(uri));
433
                        File file = FileUtils.from(FeedbackActivity.this, uri);
434

435
                        bitmap = FileUtils.rotateIfRequired(file, bitmap);
436
                        bitmap = imageZoom(bitmap);
365
//                    List<Uri> uriList = Matisse.obtainResult(data);
366
                    mSelectionData = PictureSelector.obtainMultipleResult(data);
367
                    for (LocalMedia media: mSelectionData) {
368
//                        Bitmap bitmap = BitmapFactory.decodeStream(getContentResolver().openInputStream(uri));
369
//                        File file = FileUtils.from(FeedbackActivity.this, uri);
370
//
371
//                        bitmap = FileUtils.rotateIfRequired(file, bitmap);
372
//                        bitmap = imageZoom(bitmap);
373
                        String path="";
374
                        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q){
375
                            path= media.getAndroidQToPath();
376
                        }else{
377
                            path=media.getPath();
378
                        }
437 379
                        ImageItem takePhoto = new ImageItem();
438
                        takePhoto.setBitmap(bitmap);
380
                        takePhoto.setBitmap(imageZoom(BitmapFactory.decodeFile(path)));
439 381
                        Bimp.tempSelectBitmap.add(takePhoto);
440 382
                        subscriber.onNext("");
441 383
                    }
@ -582,63 +524,6 @@ public class FeedbackActivity extends Activity implements OnClickListener, EasyP
582 524
        }
583 525
    }
584 526

585
    public void photo() {
586
        if (hasSdcard()) {
587
            int currentapiVersion = Build.VERSION.SDK_INT;
588
            Log.e("currentapiVersion", "currentapiVersion====>" + currentapiVersion);
589
            Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);//���������
590
            intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(tempFile));
591
            startActivityForResult(intent, PHOTO_REQUEST_CAMERA);
592
        }
593
    }
594

595
    public static Uri getImageContentUri(Context context, File imageFile) {
596
        String filePath = imageFile.getAbsolutePath();
597
        Cursor cursor = context.getContentResolver().query(
598
                MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
599
                new String[]{MediaStore.Images.Media._ID},
600
                MediaStore.Images.Media.DATA + "=? ",
601
                new String[]{filePath}, null);
602

603
        if (cursor != null && cursor.moveToFirst()) {
604
            int id = cursor.getInt(cursor
605
                    .getColumnIndex(MediaStore.MediaColumns._ID));
606
            Uri baseUri = Uri.parse("content://media/external/images/media");
607
            return Uri.withAppendedPath(baseUri, "" + id);
608
        } else {
609
            if (imageFile.exists()) {
610
                ContentValues values = new ContentValues();
611
                values.put(MediaStore.Images.Media.DATA, filePath);
612
                return context.getContentResolver().insert(
613
                        MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);
614
            } else {
615
                return null;
616
            }
617
        }
618
    }
619

620
    private void crop(Uri uri, Uri cutImgUri) {
621
        Intent intent = new Intent("com.android.camera.action.CROP");
622
        intent.setDataAndType(getImageContentUri(this, tempFile), "image/*");
623

624
        intent.putExtra("crop", "true");
625
        intent.putExtra("outputFormat", "JPEG");
626
        intent.putExtra("noFaceDetection", true);
627
        intent.putExtra("return-data", false);
628
        intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(tempFile));
629
        startActivityForResult(intent, PHOTO_REQUEST_CUT);
630
    }
631

632
    public Bitmap decodeUriAsBitmap(Uri uri) {
633
        Bitmap bitmap = null;
634
        try {
635
            bitmap = BitmapFactory.decodeStream(this.getContentResolver().openInputStream(uri));
636
        } catch (FileNotFoundException e) {
637
            e.printStackTrace();
638
            return null;
639
        }
640
        return bitmap;
641
    }
642 527

643 528

644 529
    protected void onRestart() {

+ 5 - 10
app/src/main/java/com/electric/chargingpile/activity/FindActivity.java

@ -12,20 +12,14 @@ import android.content.IntentFilter;
12 12
import android.content.SharedPreferences;
13 13
import android.content.res.AssetManager;
14 14
import android.graphics.Bitmap;
15
import android.graphics.BitmapFactory;
16 15
import android.net.ConnectivityManager;
17 16
import android.net.NetworkInfo;
18 17
import android.net.Uri;
19 18
import android.os.Build;
20 19
import android.os.Bundle;
21
import android.os.Environment;
22 20
import android.os.Handler;
23 21
import android.os.Message;
24 22
import android.provider.Settings;
25
import androidx.annotation.NonNull;
26
import androidx.appcompat.app.AppCompatActivity;
27
import androidx.recyclerview.widget.GridLayoutManager;
28
import androidx.recyclerview.widget.RecyclerView;
29 23
import android.util.Log;
30 24
import android.view.KeyEvent;
31 25
import android.view.LayoutInflater;
@ -37,6 +31,11 @@ import android.widget.RelativeLayout;
37 31
import android.widget.TextView;
38 32
import android.widget.Toast;
39 33
34
import androidx.annotation.NonNull;
35
import androidx.appcompat.app.AppCompatActivity;
36
import androidx.recyclerview.widget.GridLayoutManager;
37
import androidx.recyclerview.widget.RecyclerView;
38
40 39
import com.blankj.utilcode.util.EmptyUtils;
41 40
import com.blankj.utilcode.util.LogUtils;
42 41
import com.electric.chargingpile.R;
@ -49,7 +48,6 @@ import com.electric.chargingpile.data.FindData;
49 48
import com.electric.chargingpile.manager.ProfileManager;
50 49
import com.electric.chargingpile.util.BarColorUtil;
51 50
import com.electric.chargingpile.util.DES3;
52
import com.electric.chargingpile.util.ImageTools;
53 51
import com.electric.chargingpile.util.JsonUtils;
54 52
import com.electric.chargingpile.util.OkHttpUtil;
55 53
import com.electric.chargingpile.util.ToastUtil;
@ -68,7 +66,6 @@ import org.json.JSONArray;
68 66
import org.zackratos.ultimatebar.UltimateBar;
69 67
70 68
import java.io.BufferedReader;
71
import java.io.File;
72 69
import java.io.IOException;
73 70
import java.io.InputStreamReader;
74 71
import java.net.URLEncoder;
@ -87,8 +84,6 @@ import okhttp3.Call;
87 84
import pub.devrel.easypermissions.AfterPermissionGranted;
88 85
import pub.devrel.easypermissions.AppSettingsDialog;
89 86
import pub.devrel.easypermissions.EasyPermissions;
90
import top.zibin.luban.Luban;
91
import top.zibin.luban.OnCompressListener;
92 87
93 88
public class FindActivity extends AppCompatActivity implements View.OnClickListener, EasyPermissions.PermissionCallbacks {
94 89
    private static final String TAG = "FindActivity";

+ 21 - 18
app/src/main/java/com/electric/chargingpile/activity/H5Activity.java

@ -16,10 +16,11 @@ import android.net.Uri;
16 16
import android.net.http.SslError;
17 17
import android.os.Build;
18 18
import android.os.Bundle;
19
import android.os.Environment;
20 19
import android.provider.MediaStore;
20
21 21
import androidx.annotation.NonNull;
22 22
import androidx.core.content.FileProvider;
23
23 24
import android.util.Log;
24 25
import android.view.KeyEvent;
25 26
import android.view.View;
@ -46,6 +47,7 @@ import com.electric.chargingpile.manager.ProfileManager;
46 47
import com.electric.chargingpile.util.DES3;
47 48
import com.electric.chargingpile.util.ImageUitl;
48 49
import com.electric.chargingpile.util.JsonUtils;
50
import com.electric.chargingpile.util.PhotoUtils;
49 51
import com.electric.chargingpile.util.ToastUtil;
50 52
import com.google.gson.Gson;
51 53
import com.umeng.analytics.MobclickAgent;
@ -70,7 +72,7 @@ import okhttp3.Call;
70 72
import pub.devrel.easypermissions.AfterPermissionGranted;
71 73
import pub.devrel.easypermissions.EasyPermissions;
72 74
73
public class H5Activity extends Activity implements View.OnClickListener, PlatformActionListener,EasyPermissions.PermissionCallbacks {
75
public class H5Activity extends Activity implements View.OnClickListener, PlatformActionListener, EasyPermissions.PermissionCallbacks {
74 76
    private WebView webView;
75 77
    private ImageView iv_back, iv_close;
76 78
    private TextView txtTitle, tv_next;
@ -1151,6 +1153,7 @@ public class H5Activity extends Activity implements View.OnClickListener, Platfo
1151 1153
    public void onCancel(Platform platform, int i) {
1152 1154
        Toast.makeText(getApplicationContext(), "分享已取消", Toast.LENGTH_SHORT).show();
1153 1155
    }
1156
1154 1157
    @Override
1155 1158
    public void onRequestPermissionsResult(int requestCode,
1156 1159
                                           @NonNull String[] permissions,
@ -1277,7 +1280,7 @@ public class H5Activity extends Activity implements View.OnClickListener, Platfo
1277 1280
                .canceledOnTouchOutside(false).itemsCallback(new MaterialDialog.ListCallback() {
1278 1281
            @Override
1279 1282
            public void onSelection(MaterialDialog dialog, View itemView, int position, CharSequence text) {
1280
                if (position == 0){
1283
                if (position == 0) {
1281 1284
                    takeCamera();
1282 1285
                } else if (position == 1) {
1283 1286
                    takePhoto();
@ -1297,19 +1300,18 @@ public class H5Activity extends Activity implements View.OnClickListener, Platfo
1297 1300
    // 拍照
1298 1301
    private void takeCamera() {
1299 1302
        Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
1300
        if (ImageUitl.hasSdcard()) {
1301
            String fileName = "android" + System.currentTimeMillis() / 1000 + ".jpg";
1302
            cameraFilePath = ImageUitl.getPath(Environment.getExternalStorageDirectory() + "/" + "cdz") + "/" + fileName;
1303
            File imageFile = ImageUitl.getFile(cameraFilePath);
1304
            Uri uri = parseUri(imageFile);
1305
            intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);
1306
            try{
1307
                startActivityForResult(intent, FILE_CAMERA_RESULT_CODE);
1308
            } catch (Exception e) {
1309
                e.printStackTrace();
1310
            }
1311 1303
1304
        String fileName = "android" + System.currentTimeMillis() / 1000 + ".jpg";
1305
        cameraFilePath = ImageUitl.getPath(PhotoUtils.CACHE_DIR) + "/" + fileName;
1306
        File imageFile = ImageUitl.getFile(cameraFilePath);
1307
        Uri uri = parseUri(imageFile);
1308
        intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);
1309
        try {
1310
            startActivityForResult(intent, FILE_CAMERA_RESULT_CODE);
1311
        } catch (Exception e) {
1312
            e.printStackTrace();
1312 1313
        }
1314
1313 1315
    }
1314 1316
1315 1317
    private Uri parseUri(File cameraFile) {
@ -1327,7 +1329,8 @@ public class H5Activity extends Activity implements View.OnClickListener, Platfo
1327 1329
    @Override
1328 1330
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
1329 1331
        super.onActivityResult(requestCode, resultCode, data);
1330
        if (null == mOpenFileWebChromeClient.mFilePathCallback && null == mOpenFileWebChromeClient.mFilePathCallbacks) return;
1332
        if (null == mOpenFileWebChromeClient.mFilePathCallback && null == mOpenFileWebChromeClient.mFilePathCallbacks)
1333
            return;
1331 1334
        if (resultCode != RESULT_OK) {
1332 1335
            if (mOpenFileWebChromeClient.mFilePathCallbacks != null) {
1333 1336
                mOpenFileWebChromeClient.mFilePathCallbacks.onReceiveValue(null);
@ -1347,7 +1350,7 @@ public class H5Activity extends Activity implements View.OnClickListener, Platfo
1347 1350
                result = data.getData();
1348 1351
            }
1349 1352
            if (result == null && ImageUitl.hasFile(cameraFilePath)) {
1350
                result = Uri.fromFile(new File(cameraFilePath));
1353
                result = PhotoUtils.parseUri(new File(cameraFilePath));
1351 1354
            }
1352 1355
1353 1356
            if (mOpenFileWebChromeClient.mFilePathCallbacks != null) {
@ -1378,13 +1381,13 @@ public class H5Activity extends Activity implements View.OnClickListener, Platfo
1378 1381
            ClipData clipData = intent.getClipData();
1379 1382
            if (clipData != null) {
1380 1383
                results = new Uri[clipData.getItemCount()];
1381
                for (int i=0;i<clipData.getItemCount();i++) {
1384
                for (int i = 0; i < clipData.getItemCount(); i++) {
1382 1385
                    ClipData.Item item = clipData.getItemAt(i);
1383 1386
                    results[i] = item.getUri();
1384 1387
                }
1385 1388
            }
1386 1389
            if (dataString != null) {
1387
                results = new Uri[] {Uri.parse(dataString)};
1390
                results = new Uri[]{Uri.parse(dataString)};
1388 1391
            }
1389 1392
            mOpenFileWebChromeClient.mFilePathCallbacks.onReceiveValue(results);
1390 1393
            mOpenFileWebChromeClient.mFilePathCallbacks = null;

+ 21 - 19
app/src/main/java/com/electric/chargingpile/activity/HomeWebActivity.java

@ -13,10 +13,12 @@ import android.net.Uri;
13 13
import android.net.http.SslError;
14 14
import android.os.Build;
15 15
import android.os.Bundle;
16
import android.os.Environment;
16
17 17
import android.provider.MediaStore;
18
18 19
import androidx.annotation.NonNull;
19 20
import androidx.core.content.FileProvider;
21
20 22
import android.util.Log;
21 23
import android.view.KeyEvent;
22 24
import android.view.View;
@ -40,6 +42,7 @@ import com.electric.chargingpile.application.MainApplication;
40 42
import com.electric.chargingpile.util.DES3;
41 43
import com.electric.chargingpile.util.ImageUitl;
42 44
import com.electric.chargingpile.util.JsonUtils;
45
import com.electric.chargingpile.util.PhotoUtils;
43 46
import com.umeng.analytics.MobclickAgent;
44 47
45 48
import java.io.File;
@ -56,7 +59,7 @@ import cn.sharesdk.wechat.moments.WechatMoments;
56 59
import pub.devrel.easypermissions.AfterPermissionGranted;
57 60
import pub.devrel.easypermissions.EasyPermissions;
58 61
59
public class HomeWebActivity extends Activity implements View.OnClickListener, PlatformActionListener,EasyPermissions.PermissionCallbacks {
62
public class HomeWebActivity extends Activity implements View.OnClickListener, PlatformActionListener, EasyPermissions.PermissionCallbacks {
60 63
    private WebView webView;
61 64
    private ImageView iv_back, iv_close;
62 65
    private TextView txtTitle, tv_next;
@ -707,6 +710,7 @@ public class HomeWebActivity extends Activity implements View.OnClickListener, P
707 710
        super.onPause();
708 711
        MobclickAgent.onPause(this);
709 712
    }
713
710 714
    @Override
711 715
    public void onRequestPermissionsResult(int requestCode,
712 716
                                           @NonNull String[] permissions,
@ -828,7 +832,7 @@ public class HomeWebActivity extends Activity implements View.OnClickListener, P
828 832
                .canceledOnTouchOutside(false).itemsCallback(new MaterialDialog.ListCallback() {
829 833
            @Override
830 834
            public void onSelection(MaterialDialog dialog, View itemView, int position, CharSequence text) {
831
                if (position == 0){
835
                if (position == 0) {
832 836
                    takeCamera();
833 837
                } else if (position == 1) {
834 838
                    takePhoto();
@ -848,18 +852,15 @@ public class HomeWebActivity extends Activity implements View.OnClickListener, P
848 852
    // 拍照
849 853
    private void takeCamera() {
850 854
        Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
851
        if (ImageUitl.hasSdcard()) {
852
            String fileName = "android" + System.currentTimeMillis() / 1000 + ".jpg";
853
            cameraFilePath = ImageUitl.getPath(Environment.getExternalStorageDirectory() + "/" + "cdz") + "/" + fileName;
854
            File imageFile = ImageUitl.getFile(cameraFilePath);
855
            Uri uri = parseUri(imageFile);
856
            intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);
857
            try{
858
                startActivityForResult(intent, FILE_CAMERA_RESULT_CODE);
859
            } catch (Exception e) {
860
                e.printStackTrace();
861
            }
862
855
        String fileName = "android" + System.currentTimeMillis() / 1000 + ".jpg";
856
        cameraFilePath = ImageUitl.getPath(PhotoUtils.CACHE_DIR) + "/" + fileName;
857
        File imageFile = ImageUitl.getFile(cameraFilePath);
858
        Uri uri = parseUri(imageFile);
859
        intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);
860
        try {
861
            startActivityForResult(intent, FILE_CAMERA_RESULT_CODE);
862
        } catch (Exception e) {
863
            e.printStackTrace();
863 864
        }
864 865
    }
865 866
@ -878,7 +879,8 @@ public class HomeWebActivity extends Activity implements View.OnClickListener, P
878 879
    @Override
879 880
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
880 881
        super.onActivityResult(requestCode, resultCode, data);
881
        if (null == mOpenFileWebChromeClient.mFilePathCallback && null == mOpenFileWebChromeClient.mFilePathCallbacks) return;
882
        if (null == mOpenFileWebChromeClient.mFilePathCallback && null == mOpenFileWebChromeClient.mFilePathCallbacks)
883
            return;
882 884
        if (resultCode != RESULT_OK) {
883 885
            if (mOpenFileWebChromeClient.mFilePathCallbacks != null) {
884 886
                mOpenFileWebChromeClient.mFilePathCallbacks.onReceiveValue(null);
@ -898,7 +900,7 @@ public class HomeWebActivity extends Activity implements View.OnClickListener, P
898 900
                result = data.getData();
899 901
            }
900 902
            if (result == null && ImageUitl.hasFile(cameraFilePath)) {
901
                result = Uri.fromFile(new File(cameraFilePath));
903
                result = PhotoUtils.parseUri(new File(cameraFilePath));
902 904
            }
903 905
904 906
            if (mOpenFileWebChromeClient.mFilePathCallbacks != null) {
@ -929,13 +931,13 @@ public class HomeWebActivity extends Activity implements View.OnClickListener, P
929 931
            ClipData clipData = intent.getClipData();
930 932
            if (clipData != null) {
931 933
                results = new Uri[clipData.getItemCount()];
932
                for (int i=0;i<clipData.getItemCount();i++) {
934
                for (int i = 0; i < clipData.getItemCount(); i++) {
933 935
                    ClipData.Item item = clipData.getItemAt(i);
934 936
                    results[i] = item.getUri();
935 937
                }
936 938
            }
937 939
            if (dataString != null) {
938
                results = new Uri[] {Uri.parse(dataString)};
940
                results = new Uri[]{Uri.parse(dataString)};
939 941
            }
940 942
            mOpenFileWebChromeClient.mFilePathCallbacks.onReceiveValue(results);
941 943
            mOpenFileWebChromeClient.mFilePathCallbacks = null;

+ 9 - 6
app/src/main/java/com/electric/chargingpile/activity/HotInfoActivity.java

@ -8,7 +8,6 @@ import android.graphics.Bitmap;
8 8
import android.graphics.drawable.BitmapDrawable;
9 9
import android.net.Uri;
10 10
import android.os.Bundle;
11
import android.os.Environment;
12 11
import android.os.Handler;
13 12
import android.os.Message;
14 13
import android.provider.MediaStore;
@ -41,6 +40,7 @@ import com.electric.chargingpile.util.CheckMobileNum;
41 40
import com.electric.chargingpile.util.DES3;
42 41
import com.electric.chargingpile.util.NetUtil;
43 42
import com.electric.chargingpile.util.OkHttpUtil;
43
import com.electric.chargingpile.util.PhotoUtils;
44 44
import com.electric.chargingpile.util.UploadUtil;
45 45
import com.electric.chargingpile.view.CustomProgressDialog;
46 46
import com.squareup.okhttp.Request;
@ -61,7 +61,10 @@ import java.util.Map;
61 61
62 62
import cn.sharesdk.framework.Platform;
63 63
64
64
/**
65
 * 已废弃,
66
 * */
67
@Deprecated
65 68
public class HotInfoActivity extends Activity implements View.OnClickListener {
66 69
    private EditText address, remark, name, phone, car;
67 70
    private String hotAddress, poi_jing, poi_wei, city, district;
@ -430,8 +433,8 @@ public class HotInfoActivity extends Activity implements View.OnClickListener {
430 433
                    @Override
431 434
                    public void onClick(View view) {
432 435
                        Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
433
                        intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(new File(
434
                                Environment.getExternalStorageDirectory(), "androidapp.jpg")));
436
                        intent.putExtra(MediaStore.EXTRA_OUTPUT, PhotoUtils.parseUri(new File(
437
                               PhotoUtils.CACHE_DIR, "androidapp.jpg")));
435 438
                        ((Activity) mContext).startActivityForResult(intent, 2);
436 439
                        popupWindow.dismiss();
437 440
                    }
@ -597,9 +600,9 @@ public class HotInfoActivity extends Activity implements View.OnClickListener {
597 600
                break;
598 601
            // 如果是调用相机拍照时
599 602
            case 2:
600
                File temp = new File(Environment.getExternalStorageDirectory()
603
                File temp = new File(PhotoUtils.CACHE_DIR
601 604
                        + "/androidapp.jpg");
602
                startPhotoZoom(Uri.fromFile(temp));
605
                startPhotoZoom(PhotoUtils.parseUri(temp));
603 606
                break;
604 607
            // 取得裁剪后的图片
605 608
            case 3:

+ 155 - 72
app/src/main/java/com/electric/chargingpile/activity/MainMapActivity.java

@ -1,8 +1,10 @@
1 1
package com.electric.chargingpile.activity;
2 2
3 3
import android.Manifest;
4
import android.annotation.SuppressLint;
4 5
import android.app.Activity;
5 6
import android.content.BroadcastReceiver;
7
import android.content.ContentResolver;
6 8
import android.content.ContentValues;
7 9
import android.content.Context;
8 10
import android.content.DialogInterface;
@ -29,9 +31,13 @@ import android.os.Message;
29 31
30 32
import androidx.annotation.NonNull;
31 33
import androidx.annotation.Nullable;
34
import androidx.annotation.RequiresApi;
32 35
import androidx.constraintlayout.widget.ConstraintLayout;
33 36
import androidx.core.content.FileProvider;
34 37
38
import android.os.Process;
39
import android.provider.MediaStore;
40
import android.provider.Settings;
35 41
import android.text.TextUtils;
36 42
import android.util.Log;
37 43
import android.view.Gravity;
@ -54,6 +60,7 @@ import android.widget.RelativeLayout;
54 60
import android.widget.TextView;
55 61
import android.widget.Toast;
56 62
63
import com.afollestad.materialdialogs.MaterialDialog;
57 64
import com.alibaba.fastjson.JSON;
58 65
import com.amap.api.location.AMapLocation;
59 66
import com.amap.api.location.AMapLocationClient;
@ -118,22 +125,22 @@ import com.electric.chargingpile.util.BarColorUtil;
118 125
import com.electric.chargingpile.util.DES3;
119 126
import com.electric.chargingpile.util.DES3S;
120 127
import com.electric.chargingpile.util.DensityUtil;
128
import com.electric.chargingpile.util.DownloadUtil;
121 129
import com.electric.chargingpile.util.EventBusUtil;
122 130
import com.electric.chargingpile.util.JsonUtils;
123 131
import com.electric.chargingpile.util.LoadingDialog;
124 132
import com.electric.chargingpile.util.Md5Util;
125 133
import com.electric.chargingpile.util.OkHttpUtil;
134
import com.electric.chargingpile.util.PhotoUtils;
126 135
import com.electric.chargingpile.util.SharedPreferencesUtil;
127 136
import com.electric.chargingpile.util.SystemTypeUtil;
128 137
import com.electric.chargingpile.util.ToastUtil;
129 138
import com.electric.chargingpile.util.Util;
130 139
import com.electric.chargingpile.util.ZhanDBHelper;
131
import com.electric.chargingpile.view.AlertDialog;
132 140
import com.electric.chargingpile.view.AlertDialogCommon;
133 141
import com.electric.chargingpile.view.AlertDialogUpdate;
134 142
import com.electric.chargingpile.view.LocationPermissionsDialog;
135 143
import com.electric.chargingpile.view.NotRegisterDialog;
136
import com.electric.chargingpile.view.PreferentialDialog;
137 144
import com.electric.chargingpile.view.SlideAdView;
138 145
import com.electric.chargingpile.view.UpdateDialog;
139 146
import com.google.gson.Gson;
@ -157,10 +164,13 @@ import org.json.JSONObject;
157 164
import java.io.BufferedReader;
158 165
import java.io.BufferedWriter;
159 166
import java.io.File;
167
import java.io.FileInputStream;
168
import java.io.FileNotFoundException;
160 169
import java.io.FileOutputStream;
161 170
import java.io.IOException;
162 171
import java.io.InputStream;
163 172
import java.io.InputStreamReader;
173
import java.io.OutputStream;
164 174
import java.io.OutputStreamWriter;
165 175
import java.io.PrintWriter;
166 176
import java.net.Socket;
@ -174,6 +184,7 @@ import java.util.HashMap;
174 184
import java.util.List;
175 185
import java.util.Map;
176 186
import java.util.Random;
187
import java.util.concurrent.TimeUnit;
177 188
178 189
import cn.sharesdk.framework.Platform;
179 190
import cn.sharesdk.framework.PlatformActionListener;
@ -182,8 +193,8 @@ import cn.sharesdk.tencent.qq.QQ;
182 193
import cn.sharesdk.wechat.friends.Wechat;
183 194
import cn.sharesdk.wechat.moments.WechatMoments;
184 195
import okhttp3.Call;
196
import okhttp3.OkHttpClient;
185 197
import pub.devrel.easypermissions.AfterPermissionGranted;
186
import pub.devrel.easypermissions.AppSettingsDialog;
187 198
import pub.devrel.easypermissions.EasyPermissions;
188 199
189 200
public class MainMapActivity extends Activity implements LocationSource, AMapLocationListener,
@ -381,6 +392,8 @@ public class MainMapActivity extends Activity implements LocationSource, AMapLoc
381 392
    private static final int RC_CAMERA_PERM = 123;
382 393
    private static final int RC_Location_PERM = 125;
383 394
    private static final int RC_Location_FIRST_PERM = 126;
395
    private static final int RC_READ_EXTERNAL_PERM = 127;
396
    private static final int INSTALL_PERMISS_CODE = 128;
384 397
385 398
    private String adfloatUrl = "";
386 399
    private int mLocationToast=0;
@ -401,7 +414,7 @@ public class MainMapActivity extends Activity implements LocationSource, AMapLoc
401 414
                    String format = data.getString("format");
402 415
                    String f = data.getString("progress");
403 416
                    String s = f.substring(0, f.indexOf("."));
404
                    LogUtils.e(s);
417
//                    LogUtils.e(s);
405 418
406 419
                    updateDialog.updateMsg("当前已下载:" + format);
407 420
                    updateDialog.updateProgress(Integer.parseInt(s));
@ -473,7 +486,7 @@ public class MainMapActivity extends Activity implements LocationSource, AMapLoc
473 486
                                now_versionName = JsonUtils.getKeyResult(android, "versionName");
474 487
                                String[] key = now_versionName.split("\\.");
475 488
                                if (key.length - 1 > 2) {
476
                                    dialogup_other();
489
                                    permissionTask();
477 490
                                } else {
478 491
                                    dialogup();
479 492
                                }
@ -734,7 +747,6 @@ public class MainMapActivity extends Activity implements LocationSource, AMapLoc
734 747
        registerReceiver(networkChangeReceiver, intentFilter);
735 748
736 749
        EventBusUtil.register(this);
737
738 750
        if (MainApplication.ad_link.equals("1")) {
739 751
            againPoint = "1";
740 752
            is_dui = getIntent().getStringExtra("is_dui");
@ -1535,7 +1547,9 @@ public class MainMapActivity extends Activity implements LocationSource, AMapLoc
1535 1547
                                        this,
1536 1548
                                        "为了定位您的位置,推荐充电桩,充电桩位置路线导航需要开启位置权限,是否前往开启?",
1537 1549
                                        RC_Location_FIRST_PERM,
1538
                                        Manifest.permission.ACCESS_FINE_LOCATION);
1550
                                        Manifest.permission.ACCESS_FINE_LOCATION,
1551
                                        Manifest.permission.ACCESS_COARSE_LOCATION
1552
                                        );
1539 1553
1540 1554
                        }).show();
1541 1555
@ -2864,7 +2878,8 @@ public class MainMapActivity extends Activity implements LocationSource, AMapLoc
2864 2878
2865 2879
    private boolean hasLocationPermission() {
2866 2880
        return EasyPermissions.hasPermissions(this,
2867
                Manifest.permission.ACCESS_FINE_LOCATION
2881
                Manifest.permission.ACCESS_FINE_LOCATION,
2882
                Manifest.permission.ACCESS_COARSE_LOCATION
2868 2883
        );
2869 2884
    }
2870 2885
@ -2884,7 +2899,9 @@ public class MainMapActivity extends Activity implements LocationSource, AMapLoc
2884 2899
                    this,
2885 2900
                    "为了定位您的位置,推荐充电桩,充电桩位置路线导航需要开启位置权限,是否前往开启?",
2886 2901
                    RC_Location_PERM,
2887
                    Manifest.permission.ACCESS_FINE_LOCATION);
2902
                    Manifest.permission.ACCESS_FINE_LOCATION,
2903
                    Manifest.permission.ACCESS_COARSE_LOCATION
2904
                    );
2888 2905
        }
2889 2906
    }
2890 2907
@ -3375,6 +3392,8 @@ public class MainMapActivity extends Activity implements LocationSource, AMapLoc
3375 3392
                    aMap.moveCamera(CameraUpdateFactory.newLatLngZoom(screenCity, 14.0f));
3376 3393
                }
3377 3394
            }, 500);
3395
        }else if (resultCode == RESULT_OK && requestCode == INSTALL_PERMISS_CODE){
3396
            permissionTask();
3378 3397
        }
3379 3398
    }
3380 3399
@ -3410,6 +3429,10 @@ public class MainMapActivity extends Activity implements LocationSource, AMapLoc
3410 3429
    }
3411 3430
3412 3431
    private void dialogup_other() {
3432
3433
        now_versionCode="999";
3434
        now_versionName="999";
3435
        title="999";
3413 3436
        int code = Integer.parseInt(now_versionCode);
3414 3437
        if (code - getVersionCode(getApplication()) > 0) {
3415 3438
            alterDialog = new AlertDialogUpdate(MainMapActivity.this);
@ -3422,67 +3445,7 @@ public class MainMapActivity extends Activity implements LocationSource, AMapLoc
3422 3445
                        public void onClick(View v) {
3423 3446
                            showProgressWindow();
3424 3447
                            ToastUtil.showToast(getApplicationContext(), "正在下载中", Toast.LENGTH_SHORT);
3425
                            OkHttpUtils.get().url("http://cdz.evcharge.cc/app/app.apk").build()
3426
                                    .execute(new FileCallBack(Environment.getExternalStorageDirectory().getAbsolutePath(), "cdz_install") {
3427
                                        @Override
3428
                                        public void inProgress(final float progress, long total) {
3429
3430
                                            NumberFormat numberFormat = NumberFormat.getInstance();
3431
3432
                                            // 设置精确到小数点后2位
3433
3434
                                            numberFormat.setMaximumFractionDigits(2);
3435
                                            String format = numberFormat.format(progress * 100);
3436
3437
                                            Message message = new Message();
3438
                                            message.what = 0x01;
3439
3440
                                            Bundle bundle = new Bundle();
3441
                                            bundle.putString("format", format + "%");
3442
                                            LogUtils.e("当前:" + format);
3443
                                            if (!format.contains(".")) {
3444
                                                bundle.putString("progress", format + ".");
3445
                                            } else {
3446
                                                bundle.putString("progress", format);
3447
                                            }
3448
3449
3450
                                            message.setData(bundle);
3451
                                            myHandler.sendMessage(message);
3452
3453
3454
                                        }
3455
3456
                                        @Override
3457
                                        public void onError(Call call, Exception e) {
3458
//                                            LogUtils.e(e.getMessage());
3459
                                        }
3460
3461
                                        @Override
3462
                                        public void onResponse(File response) {
3463
                                            String path = getDatabasePath("zhan_list").getPath();
3464
                                            com.blankj.utilcode.util.LogUtils.e(path);
3465
                                            AppUtils.cleanAppData(path);
3466
3467
                                            Intent intent = new Intent();
3468
                                            intent.setAction(android.content.Intent.ACTION_VIEW);
3469
                                            Uri uri;
3470
                                            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
3471
                                                Uri contentUri = FileProvider.getUriForFile(context,
3472
                                                        context.getApplicationContext().getPackageName() + ".provider",
3473
                                                        response);
3474
                                                intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
3475
                                                intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
3476
                                                intent.setDataAndType(contentUri, "application/vnd.android.package-archive");
3477
                                            } else {
3478
                                                uri = Uri.fromFile(response);
3479
                                                intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
3480
                                                intent.setDataAndType(uri, "application/vnd.android.package-archive");
3481
                                            }
3482
                                            context.startActivity(intent);
3483
                                            android.os.Process.killProcess(android.os.Process.myPid());
3484
                                        }
3485
                                    });
3448
                            downLoadFile();
3486 3449
                        }
3487 3450
                    }).setNegativeButton("退出", new View.OnClickListener() {
3488 3451
                @Override
@ -3493,12 +3456,104 @@ public class MainMapActivity extends Activity implements LocationSource, AMapLoc
3493 3456
                    editor1.clear();
3494 3457
                    finish();
3495 3458
                    ProfileManager.getInstance().setSearchAddress(getApplicationContext(), "");
3496
                    android.os.Process.killProcess(android.os.Process.myPid());
3459
                    Process.killProcess(Process.myPid());
3497 3460
                }
3498 3461
            }).setCancelable(false).show();
3499 3462
        }
3500 3463
    }
3464
    private void downLoadFile() {
3465
        String url = "http://cdz.evcharge.cc/app/app.apk";
3466
3467
        showProgressWindow();
3468
        ToastUtil.showToast(getApplicationContext(), "正在下载中", Toast.LENGTH_SHORT);
3469
        OkHttpUtils.get().url("http://cdz.evcharge.cc/app/app.apk").build()
3470
                .execute(new FileCallBack(PhotoUtils.DOWNLOADS, "cdz_install") {
3471
                    @Override
3472
                    public void inProgress(final float progress, long total) {
3473
3474
                        NumberFormat numberFormat = NumberFormat.getInstance();
3475
3476
                        // 设置精确到小数点后2位
3477
3478
                        numberFormat.setMaximumFractionDigits(2);
3479
                        String format = numberFormat.format(progress * 100);
3480
3481
                        Message message = new Message();
3482
                        message.what = 0x01;
3483
3484
                        Bundle bundle = new Bundle();
3485
                        bundle.putString("format", format + "%");
3486
//                        LogUtils.e("当前:" + format);
3487
                        if (!format.contains(".")) {
3488
                            bundle.putString("progress", format + ".");
3489
                        } else {
3490
                            bundle.putString("progress", format);
3491
                        }
3492
3493
3494
                        message.setData(bundle);
3495
                        myHandler.sendMessage(message);
3496
3497
3498
                    }
3499
3500
                    @Override
3501
                    public void onError(Call call, Exception e) {
3502
                          LogUtils.e(e.getMessage());
3503
                    }
3504
3505
                    @Override
3506
                    public void onResponse(File response) {
3507
                        String path = getDatabasePath("zhan_list").getPath();
3508
                        com.blankj.utilcode.util.LogUtils.e(path);
3509
                        AppUtils.cleanAppData(path);
3510
                        Log.e("hyc","**------**"+response.getAbsolutePath());
3511
                        Log.e("hyc","**------**"+!response.exists());
3512
                        if (!response.exists()){
3513
                            Toast.makeText(context, "文件不存在", Toast.LENGTH_SHORT).show();
3514
                            return  ;
3515
                        }
3516
3517
                        Intent intent = new Intent();
3518
                        intent.setAction(android.content.Intent.ACTION_VIEW);
3519
                        Uri uri;
3520
                        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
3521
                            Uri contentUri = FileProvider.getUriForFile(context,
3522
                                    context.getApplicationContext().getPackageName() + ".provider",
3523
                                    response);
3524
                            intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
3525
                            intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
3526
                            intent.setDataAndType(contentUri, "application/vnd.android.package-archive");
3527
                        } else {
3528
                            uri = Uri.fromFile(response);
3529
                            intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
3530
                            intent.setDataAndType(uri, "application/vnd.android.package-archive");
3531
                        }
3532
                        context.startActivity(intent);
3533
                        android.os.Process.killProcess(android.os.Process.myPid());
3534
                    }
3535
                });
3536
    }
3537
3538
    @AfterPermissionGranted(RC_READ_EXTERNAL_PERM)
3539
    public void permissionTask() {
3540
        if (isPermissionOK()) {
3541
            dialogup_other();
3542
        } else {
3543
            EasyPermissions.requestPermissions(
3544
                    this, "充电桩想要获取您的图片读取权限,是否允许?",
3545
                    RC_READ_EXTERNAL_PERM,
3546
                    Manifest.permission.WRITE_EXTERNAL_STORAGE,
3547
                    Manifest.permission.READ_EXTERNAL_STORAGE);
3548
        }
3549
    }
3501 3550
3551
    private boolean isPermissionOK() {
3552
        return EasyPermissions.hasPermissions(this,
3553
                Manifest.permission.WRITE_EXTERNAL_STORAGE,
3554
                Manifest.permission.READ_EXTERNAL_STORAGE
3555
        );
3556
    }
3502 3557
    public static int getVersionCode(Context context)//获取版本号(内部识别号)
3503 3558
    {
3504 3559
        try {
@ -3921,6 +3976,7 @@ public class MainMapActivity extends Activity implements LocationSource, AMapLoc
3921 3976
    }
3922 3977
3923 3978
3979
    @SuppressLint("Range")
3924 3980
    private void getZhanListData(int level) {
3925 3981
        aMap.clear();
3926 3982
        ZhanDBHelper dbHelper = new ZhanDBHelper(this);
@ -5882,6 +5938,33 @@ public class MainMapActivity extends Activity implements LocationSource, AMapLoc
5882 5938
    }
5883 5939
5884 5940
5885
5941
    /**
5942
     * 8.0以上系统设置安装未知来源权限
5943
     */
5944
    public void setInstallPermission(){
5945
        boolean haveInstallPermission;
5946
        if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.O){
5947
            //先判断是否有安装未知来源应用的权限
5948
            haveInstallPermission = getPackageManager().canRequestPackageInstalls();
5949
            if(!haveInstallPermission){
5950
                //弹框提示用户手动打开
5951
                    AlertDialogCommon  alterDialog = new AlertDialogCommon(MainMapActivity.this);
5952
                    //此方法需要API>=26才能使用
5953
                    alterDialog.builder()
5954
                            .setTitle("安装权限")
5955
                            .setMsg("需要打开允许来自此来源,请去设置中开启此权限")
5956
                            .setCancelable(false)
5957
                            .setPositiveButton("确定", v->{
5958
                                Uri packageURI = Uri.parse("package:"+getPackageName());
5959
                                Intent intent = new Intent(Settings.ACTION_MANAGE_UNKNOWN_APP_SOURCES,packageURI);
5960
                                startActivityForResult(intent, INSTALL_PERMISS_CODE);
5961
                            }).show();
5962
            }else{
5963
                permissionTask();
5964
            }
5965
        }else{
5966
            permissionTask();
5967
        }
5968
    }
5886 5969
5887 5970
}

+ 5 - 48
app/src/main/java/com/electric/chargingpile/activity/MyWebViewActivity.java

@ -18,7 +18,6 @@ import android.net.Uri;
18 18
import android.net.http.SslError;
19 19
import android.os.Build;
20 20
import android.os.Bundle;
21
import android.os.Environment;
22 21
import android.os.Handler;
23 22
import android.provider.MediaStore;
24 23
import android.text.TextUtils;
@ -65,6 +64,7 @@ import com.electric.chargingpile.util.ImageUitl;
65 64
import com.electric.chargingpile.util.JsonUtils;
66 65
import com.electric.chargingpile.util.LoadingDialog;
67 66
import com.electric.chargingpile.util.PhoneUtils;
67
import com.electric.chargingpile.util.PhotoUtils;
68 68
import com.electric.chargingpile.util.ToastUtil;
69 69
import com.electric.chargingpile.util.Util;
70 70
import com.electric.chargingpile.view.AlertDialogTwo;
@ -245,40 +245,9 @@ public class MyWebViewActivity extends Activity implements PlatformActionListene
245 245
    }
246 246
247 247
    private void saveImage(Bitmap resource) {
248
        String saveImagePath = null;
249
        String imageFileName = "d1ev_" + PhoneUtils.getGUID() + ".png";
250
        File storageDir = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES) + "d1ev");
251
        boolean success = true;
252
        if (!storageDir.exists()) {
253
            success = storageDir.mkdir();
254
        }
255
256
        if (success) {
257
            File imageFile = new File(storageDir, imageFileName);
258
            saveImagePath = imageFile.getAbsolutePath();
259
            try {
260
                OutputStream outputStream = new FileOutputStream(imageFile);
261
                resource.compress(Bitmap.CompressFormat.PNG, 100, outputStream);
262
                outputStream.close();
263
            } catch (Exception e) {
264
                ToastUtil.showToast(MyWebViewActivity.this, "保存图像失败", Toast.LENGTH_SHORT);
265
                e.printStackTrace();
266
            }
267
268
            galleryAddPic(saveImagePath);
269
        } else {
270
            ToastUtil.showToast(MyWebViewActivity.this, "保存图像失败", Toast.LENGTH_SHORT);
271
        }
248
        PhotoUtils.saveBitmap(this,resource);
272 249
    }
273 250
274
    private void galleryAddPic(String imagePath) {
275
        Intent intent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
276
        File file = new File(imagePath);
277
        Uri uri = Uri.fromFile(file);
278
        intent.setData(uri);
279
        sendBroadcast(intent);
280
        ToastUtil.showToast(MyWebViewActivity.this, "图像已成功保存到相册", Toast.LENGTH_SHORT);
281
    }
282 251
283 252
284 253
    // 93 3.5.5 小程序埋点
@ -1496,9 +1465,9 @@ public class MyWebViewActivity extends Activity implements PlatformActionListene
1496 1465
        Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
1497 1466
        if (ImageUitl.hasSdcard()) {
1498 1467
            String fileName = "android" + System.currentTimeMillis() / 1000 + ".jpg";
1499
            cameraFilePath = ImageUitl.getPath(Environment.getExternalStorageDirectory() + "/" + "cdz") + "/" + fileName;
1468
            cameraFilePath = ImageUitl.getPath(PhotoUtils.CACHE_DIR) + "/" + fileName;
1500 1469
            File imageFile = ImageUitl.getFile(cameraFilePath);
1501
            Uri uri = parseUri(imageFile);
1470
            Uri uri =PhotoUtils.parseUri(imageFile);
1502 1471
            intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);
1503 1472
            try {
1504 1473
                startActivityForResult(intent, FILE_CAMERA_RESULT_CODE);
@ -1509,18 +1478,6 @@ public class MyWebViewActivity extends Activity implements PlatformActionListene
1509 1478
        }
1510 1479
    }
1511 1480
1512
    private Uri parseUri(File cameraFile) {
1513
        Uri imageUri;
1514
        String authority = getPackageName() + ".provider";
1515
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
1516
            //通过FileProvider创建一个content类型的Uri
1517
            imageUri = FileProvider.getUriForFile(getApplicationContext(), authority, cameraFile);
1518
        } else {
1519
            imageUri = Uri.fromFile(cameraFile);
1520
        }
1521
        return imageUri;
1522
    }
1523
1524 1481
    public class MyWebViewClient extends WebViewClient {
1525 1482
        @Override
1526 1483
        public void onPageStarted(WebView view, String url, Bitmap favicon) {
@ -1593,7 +1550,7 @@ public class MyWebViewActivity extends Activity implements PlatformActionListene
1593 1550
                result = data.getData();
1594 1551
            }
1595 1552
            if (result == null && ImageUitl.hasFile(cameraFilePath)) {
1596
                result = Uri.fromFile(new File(cameraFilePath));
1553
                result = PhotoUtils.parseUri(new File(cameraFilePath));
1597 1554
            }
1598 1555
1599 1556
            if (mOpenFileWebChromeClient.mFilePathCallbacks != null) {

+ 2 - 2
app/src/main/java/com/electric/chargingpile/activity/NewSelectCityActivity.java

@ -609,7 +609,7 @@ public class NewSelectCityActivity extends AppCompatActivity implements ISelectC
609 609
    }
610 610
611 611
    private boolean hasLocationPermission() {
612
        return EasyPermissions.hasPermissions(this, Manifest.permission.ACCESS_FINE_LOCATION);
612
        return EasyPermissions.hasPermissions(this, Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION);
613 613
    }
614 614
615 615
    @AfterPermissionGranted(RC_Location_PERM)
@ -621,7 +621,7 @@ public class NewSelectCityActivity extends AppCompatActivity implements ISelectC
621 621
                    this,
622 622
                    "为了定位您的位置,推荐充电桩,充电桩位置路线导航需要开启位置权限,是否前往开启?",
623 623
                    RC_Location_PERM,
624
                    Manifest.permission.ACCESS_FINE_LOCATION);
624
                    Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION);
625 625
        }
626 626
    }
627 627
}

+ 57 - 218
app/src/main/java/com/electric/chargingpile/activity/PrivateZhuangInfoActivity.java

@ -1,7 +1,6 @@
1 1
package com.electric.chargingpile.activity;
2 2
3 3
import android.Manifest;
4
import android.annotation.SuppressLint;
5 4
import android.app.Activity;
6 5
import android.app.ProgressDialog;
7 6
import android.app.TimePickerDialog;
@ -9,17 +8,13 @@ import android.content.Context;
9 8
import android.content.Intent;
10 9
import android.graphics.Bitmap;
11 10
import android.graphics.BitmapFactory;
12
import android.graphics.Color;
13 11
import android.graphics.Matrix;
14 12
import android.graphics.drawable.BitmapDrawable;
15
import android.graphics.drawable.ColorDrawable;
16 13
import android.graphics.drawable.Drawable;
17
import android.net.Uri;
14
import android.os.Build;
18 15
import android.os.Bundle;
19
import android.os.Environment;
20 16
import android.os.Handler;
21 17
import android.os.Message;
22
import android.provider.MediaStore;
23 18
import android.util.Base64;
24 19
import android.util.Log;
25 20
import android.view.Gravity;
@ -29,12 +24,8 @@ import android.view.Menu;
29 24
import android.view.MenuItem;
30 25
import android.view.View;
31 26
import android.view.ViewGroup;
32
import android.widget.AdapterView;
33
import android.widget.AdapterView.OnItemClickListener;
34
import android.widget.BaseAdapter;
35 27
import android.widget.Button;
36 28
import android.widget.EditText;
37
import android.widget.GridView;
38 29
import android.widget.ImageView;
39 30
import android.widget.LinearLayout;
40 31
import android.widget.PopupWindow;
@ -61,32 +52,31 @@ import com.electric.chargingpile.application.MainApplication;
61 52
import com.electric.chargingpile.data.Pic;
62 53
import com.electric.chargingpile.data.PrivateZhuang;
63 54
import com.electric.chargingpile.data.Zhan;
55
import com.electric.chargingpile.engine.GlideEngine;
64 56
import com.electric.chargingpile.util.BarColorUtil;
65 57
import com.electric.chargingpile.util.Bimp;
66 58
import com.electric.chargingpile.util.CheckMobileNum;
67 59
import com.electric.chargingpile.util.DensityUtil;
68
import com.electric.chargingpile.util.FileUtils;
69 60
import com.electric.chargingpile.util.ImageItem;
70
import com.electric.chargingpile.util.ImageUtils;
71 61
import com.electric.chargingpile.util.JsonUtils;
72 62
import com.electric.chargingpile.util.OkHttpUtil;
73 63
import com.electric.chargingpile.util.PublicWay;
74 64
import com.electric.chargingpile.util.Res;
75
import com.electric.chargingpile.util.ScreenUtils;
76 65
import com.electric.chargingpile.util.ToastUtil;
77 66
import com.electric.chargingpile.util.UploadUtil;
67
import com.electric.chargingpile.util.Util;
78 68
import com.electric.chargingpile.view.CustomProgressDialog;
69
import com.luck.picture.lib.PictureSelector;
70
import com.luck.picture.lib.animators.AnimationType;
71
import com.luck.picture.lib.config.PictureConfig;
72
import com.luck.picture.lib.config.PictureMimeType;
73
import com.luck.picture.lib.entity.LocalMedia;
79 74
import com.squareup.okhttp.Request;
80 75
import com.squareup.okhttp.Response;
81
import com.zhihu.matisse.Matisse;
82
import com.zhihu.matisse.MimeType;
83
import com.zhihu.matisse.engine.impl.GlideEngine;
84
import com.zhihu.matisse.internal.entity.CaptureStrategy;
85 76
86 77
import org.json.JSONException;
87 78
import org.json.JSONObject;
88 79
89
import java.io.ByteArrayInputStream;
90 80
import java.io.ByteArrayOutputStream;
91 81
import java.io.File;
92 82
import java.io.FileNotFoundException;
@ -125,9 +115,6 @@ public class PrivateZhuangInfoActivity extends Activity implements View.OnClickL
125 115
    private TimePickerDialog tpd_close = null;
126 116
    private String camePath;//拍照路径
127 117
128
    private static final String PHOTO_FILE_NAME = "android.jpg";
129
    private static final String PHOTO_FILE_PATH = getPath(Environment.getExternalStorageDirectory() + "/" + "cdz");
130
    private File tempFile;
131 118
    private static final int PHOTO_REQUEST_CAMERA = 1;
132 119
    private static final int PHOTO_REQUEST_GALLERY = 2;
133 120
    private static final int PHOTO_REQUEST_CUT = 3;
@ -176,8 +163,7 @@ public class PrivateZhuangInfoActivity extends Activity implements View.OnClickL
176 163
    private RadioGroup rg_claimtype, rg_park;
177 164
    public static Bitmap bimap;
178 165
    private View parentView;
179
    private PopupWindow pop = null;
180
    private LinearLayout ll_popup;
166
181 167
    private TextView open_time, close_time, share_list;
182 168
    private RelativeLayout rl_address;
183 169
    private String tag, id, zhan_name, zhan_address, poi_jing, poi_wei, fast_num, slow_num,
@ -265,9 +251,6 @@ public class PrivateZhuangInfoActivity extends Activity implements View.OnClickL
265 251
    protected void onCreate(Bundle savedInstanceState) {
266 252
        super.onCreate(savedInstanceState);
267 253
        initDate();
268
269
270
        tempFile = getFile(PHOTO_FILE_PATH + "/" + PHOTO_FILE_NAME);
271 254
        Res.init(this);
272 255
        bimap = BitmapFactory.decodeResource(getResources(), R.drawable.addpic65);
273 256
        PublicWay.activityList.add(this);
@ -311,58 +294,6 @@ public class PrivateZhuangInfoActivity extends Activity implements View.OnClickL
311 294
        selectBitmap[1] = null;
312 295
        selectBitmap[2] = null;
313 296
314
        pop = new PopupWindow(PrivateZhuangInfoActivity.this);
315
316
        View view = getLayoutInflater().inflate(R.layout.item_popupwindows, null);
317
318
        ll_popup = (LinearLayout) view.findViewById(R.id.ll_popup);
319
320
        pop.setWidth(ViewGroup.LayoutParams.MATCH_PARENT);
321
        pop.setHeight(ViewGroup.LayoutParams.WRAP_CONTENT);
322
        pop.setBackgroundDrawable(new BitmapDrawable());
323
        pop.setFocusable(true);
324
        pop.setOutsideTouchable(true);
325
        pop.setContentView(view);
326
327
        final RelativeLayout parent = (RelativeLayout) view.findViewById(R.id.parent);
328
        Button bt1 = (Button) view.findViewById(R.id.item_popupwindows_camera);
329
        Button bt2 = (Button) view.findViewById(R.id.item_popupwindows_Photo);
330
        Button bt3 = (Button) view.findViewById(R.id.item_popupwindows_cancel);
331
        parent.setOnClickListener(new View.OnClickListener() {
332
            @Override
333
            public void onClick(View v) {
334
                // TODO Auto-generated method stub
335
                pop.dismiss();
336
                ll_popup.clearAnimation();
337
            }
338
        });
339
        bt1.setOnClickListener(new View.OnClickListener() {
340
            public void onClick(View v) {
341
                pop.dismiss();
342
                ll_popup.clearAnimation();
343
                if (MainScanActivity.isCameraUseable()) {
344
                    photo();
345
                } else {
346
                    ToastUtil.showToast(getApplicationContext(), "您当前关闭了调用摄像头权限", Toast.LENGTH_SHORT);
347
                }
348
            }
349
        });
350
        bt2.setOnClickListener(new View.OnClickListener() {
351
            public void onClick(View v) {
352
                Intent intent = new Intent(PrivateZhuangInfoActivity.this,
353
                        AlbumActivity.class);
354
                startActivity(intent);
355
                overridePendingTransition(R.anim.activity_translate_in, R.anim.activity_translate_out);
356
                pop.dismiss();
357
                ll_popup.clearAnimation();
358
            }
359
        });
360
        bt3.setOnClickListener(new View.OnClickListener() {
361
            public void onClick(View v) {
362
                pop.dismiss();
363
                ll_popup.clearAnimation();
364
            }
365
        });
366 297
367 298
        take_image_0 = findViewById(R.id.take_image_0);
368 299
        take_image_1 = findViewById(R.id.take_image_1);
@ -392,6 +323,7 @@ public class PrivateZhuangInfoActivity extends Activity implements View.OnClickL
392 323
     * 调用图库选择
393 324
     */
394 325
    private void callGallery() {
326
/*
395 327
        Matisse.from(PrivateZhuangInfoActivity.this)
396 328
                .choose(MimeType.of(MimeType.JPEG, MimeType.PNG, MimeType.GIF))
397 329
                .showSingleMediaType(true)
@ -401,6 +333,27 @@ public class PrivateZhuangInfoActivity extends Activity implements View.OnClickL
401 333
                .captureStrategy(new CaptureStrategy(true, "com.electric.chargingpile.provider"))
402 334
                .imageEngine(new GlideEngine())
403 335
                .forResult(REQUEST_CODE_CHOOSE);
336
*/
337
        PictureSelector.create(this)
338
                .openGallery(PictureMimeType.ofImage())
339
                .selectionMode(PictureConfig.SINGLE)
340
                .isSingleDirectReturn(true)
341
                .isCompress(true)//是否压缩
342
                .isPreviewEggs(true)//预览图片时是否增强左右滑动图片体验
343
                .isGif(true)//是否显示gif
344
                .isAndroidQTransform(true)
345
                .imageEngine(GlideEngine.createGlideEngine())
346
                .isWeChatStyle(false)// 是否开启微信图片选择风格
347
                .isUseCustomCamera(false)// 是否使用自定义相机
348
                .isPageStrategy(true)// 是否开启分页策略 & 每页多少条;默认开启
349
                .setPictureStyle(Util.getWhiteStyle(this))// 动态自定义相册主题
350
                .setRecyclerAnimationMode(AnimationType.SLIDE_IN_BOTTOM_ANIMATION)// 列表动画效果
351
                .isMaxSelectEnabledMask(true)// 选择数到了最大阀值列表是否启用蒙层效果
352
                .imageSpanCount(4)// 每行显示个数
353
                .isReturnEmpty(false)// 未选择数据时点击按钮是否可以返回
354
                .isAutomaticTitleRecyclerTop(true)//图片列表超过一屏连续点击顶部标题栏快速回滚至顶部
355
                .forResult(REQUEST_CODE_CHOOSE);
356
404 357
    }
405 358
406 359
    @Override
@ -436,21 +389,33 @@ public class PrivateZhuangInfoActivity extends Activity implements View.OnClickL
436 389
            @Override
437 390
            public void subscribe(ObservableEmitter<String> subscriber) {
438 391
                try {
439
                    List<Uri> uriList = Matisse.obtainResult(data);
440
                    Uri uri = uriList.get(0);
441
                    Bitmap bitmap = BitmapFactory.decodeStream(getContentResolver().openInputStream(uri));
442
                    File file = FileUtils.from(PrivateZhuangInfoActivity.this, uri);
443
444
                    bitmap = FileUtils.rotateIfRequired(file, bitmap);
445
                    bitmap = imageZoom(bitmap);
446
447
                    ImageItem takePhoto = new ImageItem();
448
                    takePhoto.setBitmap(bitmap);
449
                    selectBitmap[selectIndex] = takePhoto;
450
                    isTakePhoto = true;
392
                    List<LocalMedia> mediaList = PictureSelector.obtainMultipleResult(data);
393
                    if (mediaList!=null && mediaList.size()>0){
394
                     /*   List<Uri> uriList = Matisse.obtainResult(data);
395
                        Uri uri = uriList.get(0);
396
                        Bitmap bitmap = BitmapFactory.decodeStream(getContentResolver().openInputStream(uri));
397
                        File file = FileUtils.from(PrivateZhuangInfoActivity.this, uri);
398
399
                        bitmap = FileUtils.rotateIfRequired(file, bitmap);
400
                        bitmap = imageZoom(bitmap);*/
401
402
                        String path="";
403
                        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q){
404
                            path= mediaList.get(0).getAndroidQToPath();
405
                        }else{
406
                            path=mediaList.get(0).getPath();
407
                        }
408
                        ImageItem takePhoto = new ImageItem();
409
                        takePhoto.setBitmap(imageZoom(BitmapFactory.decodeFile(path)));
410
                        selectBitmap[selectIndex] = takePhoto;
411
                        isTakePhoto = true;
412
413
                        subscriber.onNext("");
414
                        subscriber.onComplete();
415
                    }else{
416
                        subscriber.onError(new Exception(""));
417
                    }
451 418
452
                    subscriber.onNext("");
453
                    subscriber.onComplete();
454 419
                } catch (Exception e) {
455 420
                    e.printStackTrace();
456 421
                    subscriber.onError(e);
@ -1104,13 +1069,6 @@ public class PrivateZhuangInfoActivity extends Activity implements View.OnClickL
1104 1069
1105 1070
    private static final int TAKE_PICTURE = 0x000001;
1106 1071
1107
    public void photo() {
1108
        if (hasSdcard()) {
1109
            Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
1110
            intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(tempFile));
1111
            startActivityForResult(intent, PHOTO_REQUEST_CAMERA);
1112
        }
1113
    }
1114 1072
1115 1073
    @Override
1116 1074
    protected void onDestroy() {
@ -1119,125 +1077,6 @@ public class PrivateZhuangInfoActivity extends Activity implements View.OnClickL
1119 1077
        super.onDestroy();
1120 1078
    }
1121 1079
1122
1123
    private Bitmap compressBmpFromBmp(Bitmap image) {
1124
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
1125
        int options = 100;
1126
        image.compress(Bitmap.CompressFormat.JPEG, 60, baos);
1127
        while (baos.toByteArray().length / 1024 > 200) {
1128
            baos.reset();
1129
            options -= 10;
1130
            image.compress(Bitmap.CompressFormat.JPEG, options, baos);
1131
        }
1132
        ByteArrayInputStream isBm = new ByteArrayInputStream(baos.toByteArray());
1133
        Bitmap bitmap = BitmapFactory.decodeStream(isBm, null, null);
1134
        return bitmap;
1135
    }
1136
1137
1138
    private void crop(Uri uri, Uri cutImgUri) {
1139
        Intent intent = new Intent("com.android.camera.action.CROP");
1140
        intent.setDataAndType(uri, "image/*");
1141
        intent.putExtra("crop", "true");
1142
        intent.putExtra("outputFormat", "JPEG");
1143
        intent.putExtra("noFaceDetection", true);// ȡ������ʶ��
1144
        intent.putExtra("return-data", false);// true:������uri��false������uri
1145
        intent.putExtra(MediaStore.EXTRA_OUTPUT, cutImgUri);//д���ȡ��ͼƬ
1146
        startActivityForResult(intent, PHOTO_REQUEST_CUT);
1147
    }
1148
1149
    private boolean hasSdcard() {
1150
        if (Environment.getExternalStorageState().equals(
1151
                Environment.MEDIA_MOUNTED)) {
1152
            return true;
1153
        } else {
1154
            return false;
1155
        }
1156
    }
1157
1158
    private static String getPath(String path) {
1159
        File f = new File(path);
1160
        if (!f.exists()) {
1161
            f.mkdirs();
1162
        }
1163
        return f.getAbsolutePath();
1164
    }
1165
1166
    private File getFile(String path) {
1167
        File f = new File(path);
1168
        if (!f.exists()) {
1169
            try {
1170
                f.createNewFile();
1171
            } catch (IOException e) {
1172
                e.printStackTrace();
1173
            }
1174
        }
1175
        return f;
1176
    }
1177
1178
    public Bitmap decodeUriAsBitmap(Uri uri) {
1179
        Bitmap bitmap = null;
1180
        try {
1181
            bitmap = BitmapFactory.decodeStream(this.getContentResolver().openInputStream(uri));
1182
        } catch (FileNotFoundException e) {
1183
            e.printStackTrace();
1184
            return null;
1185
        }
1186
        return bitmap;
1187
    }
1188
1189
    private Bitmap comp(Bitmap image) {
1190
1191
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
1192
        image.compress(Bitmap.CompressFormat.JPEG, 30, baos);
1193
        if (baos.toByteArray().length / 1024 > 1024) {//判断如果图片大于1M,进行压缩避免在生成图片(BitmapFactory.decodeStream)时溢出
1194
            baos.reset();//重置baos即清空baos
1195
            image.compress(Bitmap.CompressFormat.JPEG, 50, baos);//这里压缩50%,把压缩后的数据存放到baos中
1196
        }
1197
        ByteArrayInputStream isBm = new ByteArrayInputStream(baos.toByteArray());
1198
        BitmapFactory.Options newOpts = new BitmapFactory.Options();
1199
        //开始读入图片,此时把options.inJustDecodeBounds 设回true了
1200
        newOpts.inJustDecodeBounds = true;
1201
        Bitmap bitmap = BitmapFactory.decodeStream(isBm, null, newOpts);
1202
        newOpts.inJustDecodeBounds = false;
1203
        int w = newOpts.outWidth;
1204
        int h = newOpts.outHeight;
1205
        //现在主流手机比较多是800*480分辨率,所以高和宽我们设置为
1206
        float hh = 800f;//这里设置高度为800f
1207
        float ww = 480f;//这里设置宽度为480f
1208
        //缩放比。由于是固定比例缩放,只用高或者宽其中一个数据进行计算即可
1209
        int be = 1;//be=1表示不缩放
1210
        if (w > h && w > ww) {//如果宽度大的话根据宽度固定大小缩放
1211
            be = (int) (newOpts.outWidth / ww);
1212
        } else if (w < h && h > hh) {//如果高度高的话根据宽度固定大小缩放
1213
            be = (int) (newOpts.outHeight / hh);
1214
        }
1215
        if (be <= 0)
1216
            be = 1;
1217
        newOpts.inSampleSize = be;//设置缩放比例
1218
        newOpts.inPreferredConfig = Bitmap.Config.RGB_565;//降低图片从ARGB888到RGB565
1219
        //重新读入图片,注意此时已经把options.inJustDecodeBounds 设回false了
1220
        isBm = new ByteArrayInputStream(baos.toByteArray());
1221
        bitmap = BitmapFactory.decodeStream(isBm, null, newOpts);
1222
        return compressImage(bitmap);//压缩好比例大小后再进行质量压缩
1223
    }
1224
1225
1226
    private Bitmap compressImage(Bitmap image) {
1227
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
1228
        image.compress(Bitmap.CompressFormat.JPEG, 80, baos);//质量压缩方法,这里100表示不压缩,把压缩后的数据存放到baos中
1229
        int options = 70;
1230
        while (baos.toByteArray().length / 1024 > 300) {    //循环判断如果压缩后图片是否大于100kb,大于继续压缩
1231
            baos.reset();//重置baos即清空baos
1232
            options -= 10;//每次都减少10
1233
            image.compress(Bitmap.CompressFormat.JPEG, options, baos);//这里压缩options%,把压缩后的数据存放到baos中
1234
1235
        }
1236
        ByteArrayInputStream isBm = new ByteArrayInputStream(baos.toByteArray());//把压缩后的数据baos存放到ByteArrayInputStream中
1237
        Bitmap bitmap = BitmapFactory.decodeStream(isBm, null, null);//把ByteArrayInputStream数据生成图片
1238
        return bitmap;
1239
    }
1240
1241 1080
    private Bitmap imageZoom(Bitmap bm) {
1242 1081
        // 图片允许最大空间 单位:KB
1243 1082
        double maxSize = 200.00;

+ 2 - 0
app/src/main/java/com/electric/chargingpile/activity/PublishItemsActivity.java

@ -22,7 +22,9 @@ import com.umeng.analytics.MobclickAgent;
22 22
/**
23 23
 * @author dxh
24 24
 * 发布类型选择页
25
 * 已废弃,不在维护。
25 26
 */
27
@Deprecated
26 28
public class PublishItemsActivity extends AppCompatActivity implements View.OnClickListener {
27 29
    private static final String TAG = "PublishItemsActivity";
28 30

+ 69 - 120
app/src/main/java/com/electric/chargingpile/activity/PublishPicTopicActivity.java

@ -16,7 +16,7 @@ import android.graphics.drawable.ColorDrawable;
16 16
import android.net.Uri;
17 17
import android.os.Build;
18 18
import android.os.Bundle;
19
import android.os.Environment;
19
20 20
import android.os.Handler;
21 21
import android.os.Message;
22 22
import android.provider.MediaStore;
@ -54,6 +54,7 @@ import com.electric.chargingpile.data.ChatRecommendBean;
54 54
import com.electric.chargingpile.data.PhotoUploadResult;
55 55
import com.electric.chargingpile.data.PublishItemSerializable;
56 56
import com.electric.chargingpile.data.UploadPic;
57
import com.electric.chargingpile.engine.GlideEngine;
57 58
import com.electric.chargingpile.util.BarColorUtil;
58 59
import com.electric.chargingpile.util.Base64;
59 60
import com.electric.chargingpile.util.Bimp;
@ -68,16 +69,18 @@ import com.electric.chargingpile.util.PublicWay;
68 69
import com.electric.chargingpile.util.Res;
69 70
import com.electric.chargingpile.util.ToastUtil;
70 71
import com.electric.chargingpile.util.Util;
72
import com.luck.picture.lib.PictureSelector;
73
import com.luck.picture.lib.animators.AnimationType;
74
import com.luck.picture.lib.config.PictureConfig;
75
import com.luck.picture.lib.config.PictureMimeType;
76
import com.luck.picture.lib.entity.LocalMedia;
71 77
import com.luck.picture.lib.tools.ScreenUtils;
72 78
import com.umeng.analytics.MobclickAgent;
73 79
import com.upyun.library.common.ParallelUploader;
74 80
import com.upyun.library.common.UploadEngine;
75 81
import com.upyun.library.listener.UpCompleteListener;
76 82
import com.upyun.library.listener.UpProgressListener;
77
import com.zhihu.matisse.Matisse;
78
import com.zhihu.matisse.MimeType;
79
import com.zhihu.matisse.engine.impl.GlideEngine;
80
import com.zhihu.matisse.internal.entity.CaptureStrategy;
83
81 84
import com.zhy.http.okhttp.OkHttpUtils;
82 85
import com.zhy.http.okhttp.callback.StringCallback;
83 86
@ -104,17 +107,15 @@ import pub.devrel.easypermissions.EasyPermissions;
104 107
/**
105 108
 * @desc : 发布话题
106 109
 */
110
@Deprecated
107 111
public class PublishPicTopicActivity extends Activity implements OnClickListener, EasyPermissions.PermissionCallbacks {
108 112
    private static final String TAG = "PublishPicTopicActivity";
109 113
    private static final int PIC_NUM = 9;
110 114
    private ImageView ivBack;
111 115
    private TextView tv_right;
112
    private static String PHOTO_FILE_NAME = "";
113
    private static final String PHOTO_FILE_PATH = getPath(Environment.getExternalStorageDirectory() + "/" + "cdz");
114 116
    private GridView noScrollgridview;
115
    private PopupWindow pop = null;
116
    private LinearLayout ll_popup;
117
    private File tempFile;
117
118
118 119
    Bitmap bm = null;
119 120
    private static final int PHOTO_REQUEST_CAMERA = 1;
120 121
    private static final int PHOTO_REQUEST_GALLERY = 2;
@ -153,7 +154,7 @@ public class PublishPicTopicActivity extends Activity implements OnClickListener
153 154
154 155
    public static final int REQUEST_CODE_CHOOSE = 342;
155 156
156
157
    private List<LocalMedia> mSelectionData =new ArrayList<LocalMedia>();
157 158
    @Override
158 159
    protected void onCreate(Bundle savedInstanceState) {
159 160
        super.onCreate(savedInstanceState);
@ -163,9 +164,6 @@ public class PublishPicTopicActivity extends Activity implements OnClickListener
163 164
        initView();
164 165
        Res.init(this);
165 166
        PublicWay.activityList.add(this);
166
        long appTime1 = System.currentTimeMillis() / 1000;
167
        PHOTO_FILE_NAME = "android" + appTime1 + ".jpg";
168
        tempFile = getFile(PHOTO_FILE_PATH + "/" + PHOTO_FILE_NAME);
169 167
        dialog = new LoadingDialog(this);
170 168
        dialog.setCanceledOnTouchOutside(false);
171 169
        Init();
@ -386,77 +384,8 @@ public class PublishPicTopicActivity extends Activity implements OnClickListener
386 384
        return f;
387 385
    }
388 386
389
    private static String getPath(String path) {
390
        File f = new File(path);
391
        if (!f.exists()) {
392
            f.mkdirs();
393
        }
394
        return f.getAbsolutePath();
395
    }
396
397
    private boolean hasSdcard() {
398
        if (Environment.getExternalStorageState().equals(
399
                Environment.MEDIA_MOUNTED)) {
400
            return true;
401
        } else {
402
            return false;
403
        }
404
    }
405 387
406 388
    public void Init() {
407
        pop = new PopupWindow(PublishPicTopicActivity.this);
408
        View view = getLayoutInflater().inflate(R.layout.item_popupwindows, null);
409
        ll_popup = (LinearLayout) view.findViewById(R.id.ll_popup);
410
411
        pop.setWidth(ViewGroup.LayoutParams.MATCH_PARENT);
412
        pop.setHeight(ViewGroup.LayoutParams.WRAP_CONTENT);
413
        pop.setBackgroundDrawable(new BitmapDrawable());
414
        pop.setFocusable(true);
415
        pop.setOutsideTouchable(true);
416
        pop.setContentView(view);
417
418
419
        final RelativeLayout parent = (RelativeLayout) view.findViewById(R.id.parent);
420
        Button bt1 = (Button) view.findViewById(R.id.item_popupwindows_camera);
421
        Button bt2 = (Button) view.findViewById(R.id.item_popupwindows_Photo);
422
        Button bt3 = (Button) view.findViewById(R.id.item_popupwindows_cancel);
423
        parent.setOnClickListener(new OnClickListener() {
424
425
            @Override
426
            public void onClick(View v) {
427
                // TODO Auto-generated method stub
428
                pop.dismiss();
429
                ll_popup.clearAnimation();
430
            }
431
        });
432
        bt1.setOnClickListener(new OnClickListener() {
433
            public void onClick(View v) {
434
                pop.dismiss();
435
                ll_popup.clearAnimation();
436
                if (MainScanActivity.isCameraUseable()) {
437
                    photo();
438
                } else {
439
                    ToastUtil.showToast(getApplicationContext(), "您当前关闭了调用摄像头权限", Toast.LENGTH_SHORT);
440
                }
441
            }
442
        });
443
        bt2.setOnClickListener(new OnClickListener() {
444
            public void onClick(View v) {
445
                Intent intent = new Intent(PublishPicTopicActivity.this,
446
                        AlbumActivityFeedback.class);
447
                startActivity(intent);
448
                overridePendingTransition(R.anim.activity_translate_in, R.anim.activity_translate_out);
449
                pop.dismiss();
450
                ll_popup.clearAnimation();
451
            }
452
        });
453
        bt3.setOnClickListener(new OnClickListener() {
454
            public void onClick(View v) {
455
                pop.dismiss();
456
                ll_popup.clearAnimation();
457
            }
458
        });
459
460 389
        noScrollgridview = (GridView) findViewById(R.id.noScrollgridview);
461 390
        noScrollgridview.setSelector(new ColorDrawable(Color.TRANSPARENT));
462 391
        adapter = new GridAdapter(this);
@ -487,15 +416,36 @@ public class PublishPicTopicActivity extends Activity implements OnClickListener
487 416
     */
488 417
    private void callGallery() {
489 418
        MobclickAgent.onEvent(getApplicationContext(), "1024");
490
        Matisse.from(PublishPicTopicActivity.this)
491
                .choose(MimeType.of(MimeType.JPEG, MimeType.PNG, MimeType.GIF))
492
                .showSingleMediaType(true)
493
                .countable(true)
494
                .maxSelectable(PIC_NUM - Bimp.tempSelectBitmap.size())
495
                .capture(true)
496
                .captureStrategy(new CaptureStrategy(true, "com.electric.chargingpile.provider"))
497
                .imageEngine(new GlideEngine())
419
//        Matisse.from(PublishPicTopicActivity.this)
420
//                .choose(MimeType.of(MimeType.JPEG, MimeType.PNG, MimeType.GIF))
421
//                .showSingleMediaType(true)
422
//                .countable(true)
423
//                .maxSelectable(PIC_NUM - Bimp.tempSelectBitmap.size())
424
//                .capture(true)
425
//                .captureStrategy(new CaptureStrategy(true, "com.electric.chargingpile.provider"))
426
//                .imageEngine(new GlideEngine())
427
//                .forResult(REQUEST_CODE_CHOOSE);
428
        PictureSelector.create(this)
429
                .openGallery(PictureMimeType.ofImage())
430
                .maxSelectNum(PIC_NUM)
431
                .selectionData(mSelectionData)//是否传入已选图片
432
                .selectionMode(PictureConfig.MULTIPLE)
433
                .isCompress(true)//是否压缩
434
                .isPreviewEggs(true)//预览图片时是否增强左右滑动图片体验
435
                .isGif(true)//是否显示gif
436
                .isAndroidQTransform(true)
437
                .imageEngine(GlideEngine.createGlideEngine())
438
                .isWeChatStyle(false)// 是否开启微信图片选择风格
439
                .isUseCustomCamera(false)// 是否使用自定义相机
440
                .isPageStrategy(true)// 是否开启分页策略 & 每页多少条;默认开启
441
                .setPictureStyle(Util.getWhiteStyle(this))// 动态自定义相册主题
442
                .setRecyclerAnimationMode(AnimationType.SLIDE_IN_BOTTOM_ANIMATION)// 列表动画效果
443
                .isMaxSelectEnabledMask(true)// 选择数到了最大阀值列表是否启用蒙层效果
444
                .imageSpanCount(4)// 每行显示个数
445
                .isReturnEmpty(false)// 未选择数据时点击按钮是否可以返回
446
                .isAutomaticTitleRecyclerTop(true)//图片列表超过一屏连续点击顶部标题栏快速回滚至顶部
498 447
                .forResult(REQUEST_CODE_CHOOSE);
448
499 449
    }
500 450
501 451
    @Override
@ -533,30 +483,38 @@ public class PublishPicTopicActivity extends Activity implements OnClickListener
533 483
            @Override
534 484
            public void subscribe(ObservableEmitter<String> subscriber) throws Exception {
535 485
                try {
536
                    List<Uri> uriList = Matisse.obtainResult(data);
486
//                    List<Uri> uriList = Matisse.obtainResult(data);
487
                    mSelectionData= PictureSelector.obtainMultipleResult(data);
488
537 489
                    int i = 0;
538
                    for (Uri uri : uriList) {
490
                    for (LocalMedia localMedia : mSelectionData) {
539 491
                        i++;
540
                        Bitmap bitmap = BitmapFactory.decodeStream(getContentResolver().openInputStream(uri));
541
                        File file = FileUtils.from(PublishPicTopicActivity.this, uri);
542
543
                        bitmap = FileUtils.rotateIfRequired(file, bitmap);
544
                        bitmap = imageZoom(bitmap);
492
//                        Bitmap bitmap = BitmapFactory.decodeStream(getContentResolver().openInputStream(uri));
493
//                        File file = FileUtils.from(PublishPicTopicActivity.this, uri);
494
//
495
//                        bitmap = FileUtils.rotateIfRequired(file, bitmap);
496
//                        bitmap = imageZoom(bitmap);
545 497
                        ImageItem takePhoto = new ImageItem();
546
                        String deviceId = JPushInterface.getUdid(MainApplication.context);
547
                        takePhoto.fName = DateUtils.getSimpleCurrentDate();
548
                        if (TextUtils.isEmpty(deviceId)) {
549
                            takePhoto.fName += "_" + Util.getRandom(15);
550
                        } else {
551
                            takePhoto.fName += "_" + deviceId;
498
//                        String deviceId = JPushInterface.getUdid(MainApplication.context);
499
//                        takePhoto.fName = DateUtils.getSimpleCurrentDate();
500
//                        if (TextUtils.isEmpty(deviceId)) {
501
//                            takePhoto.fName += "_" + Util.getRandom(15);
502
//                        } else {
503
//                            takePhoto.fName += "_" + deviceId;
504
//                        }
505
//                        takePhoto.fName += "_00" + i;
506
//
507
//                        String filePath = file.getAbsolutePath();
508
//                        String suffix = filePath.substring(filePath.lastIndexOf(".") + 1);
509
//                        takePhoto.fName += "." + suffix;
510
                        String path="";
511
                        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q){
512
                            path= localMedia.getAndroidQToPath();
513
                        }else{
514
                            path=localMedia.getPath();
552 515
                        }
553
                        takePhoto.fName += "_00" + i;
554
555
                        String filePath = file.getAbsolutePath();
556
                        String suffix = filePath.substring(filePath.lastIndexOf(".") + 1);
557
                        takePhoto.fName += "." + suffix;
558
                        takePhoto.setBitmap(bitmap);
559
                        takePhoto.setFile(file);
516
                        takePhoto.setBitmap(imageZoom(BitmapFactory.decodeFile(path)));
517
                        takePhoto.setFile(new File(path));
560 518
                        Bimp.tempSelectBitmap.add(takePhoto);
561 519
                        subscriber.onNext("");
562 520
                    }
@ -738,15 +696,6 @@ public class PublishPicTopicActivity extends Activity implements OnClickListener
738 696
        }
739 697
    }
740 698
741
    public void photo() {
742
        if (hasSdcard()) {
743
            int currentapiVersion = Build.VERSION.SDK_INT;
744
            Log.e("currentapiVersion", "currentapiVersion====>" + currentapiVersion);
745
            Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
746
            intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(tempFile));
747
            startActivityForResult(intent, PHOTO_REQUEST_CAMERA);
748
        }
749
    }
750 699
751 700
    @Override
752 701
    protected void onRestart() {

+ 5 - 5
app/src/main/java/com/electric/chargingpile/activity/PublishVideoTopicActivity.java

@ -11,7 +11,6 @@ import android.content.pm.ActivityInfo;
11 11
import android.graphics.Color;
12 12
import android.net.Uri;
13 13
import android.os.Bundle;
14
import android.os.Environment;
15 14
import android.text.Editable;
16 15
import android.text.Html;
17 16
import android.text.TextUtils;
@ -43,6 +42,7 @@ import com.electric.chargingpile.util.Base64;
43 42
import com.electric.chargingpile.util.CommonParams;
44 43
import com.electric.chargingpile.util.DateUtils;
45 44
import com.electric.chargingpile.util.JsonUtils;
45
import com.electric.chargingpile.util.PhotoUtils;
46 46
import com.electric.chargingpile.util.ToastUtil;
47 47
import com.electric.chargingpile.util.Util;
48 48
import com.luck.picture.lib.PictureSelector;
@ -66,7 +66,7 @@ import java.util.Map;
66 66
67 67
import cn.jpush.android.api.JPushInterface;
68 68
import okhttp3.Call;
69
69
@Deprecated
70 70
public class PublishVideoTopicActivity extends Activity implements OnClickListener {
71 71
    private static final String TAG = "PublishVideoTopicActivity";
72 72
    Context mContext;
@ -85,7 +85,7 @@ public class PublishVideoTopicActivity extends Activity implements OnClickListen
85 85
    private String fileName;
86 86
87 87
88
    public static final String CACHE_DIR = Environment.getExternalStorageDirectory().getAbsolutePath() + "/cdz";
88
    public static final String CACHE_DIR = PhotoUtils.CACHE_DIR;
89 89
90 90
91 91
    public static final String IMAGE_CACHE = CACHE_DIR + "/cache/image/";
@ -241,7 +241,7 @@ public class PublishVideoTopicActivity extends Activity implements OnClickListen
241 241
                        .imageEngine(GlideEngine.createGlideEngine())
242 242
                        .theme(R.style.picture_white_style)// 主题样式设置 具体参考 values/styles   用法:R.style.picture.white.style v2.3.3后 建议使用setPictureStyle()动态方式
243 243
                        .isWeChatStyle(false)// 是否开启微信图片选择风格
244
                        .isUseCustomCamera(true)// 是否使用自定义相机
244
                        .isUseCustomCamera(false)// 是否使用自定义相机
245 245
                        .isPageStrategy(true)// 是否开启分页策略 & 每页多少条;默认开启
246 246
                        .setPictureStyle(Util.getWhiteStyle(this))// 动态自定义相册主题
247 247
//                        .setPictureWindowAnimationStyle(mWindowAnimationStyle)// 自定义相册启动退出动画
@ -454,7 +454,7 @@ public class PublishVideoTopicActivity extends Activity implements OnClickListen
454 454
                }
455 455
456 456
                Glide.with(this)
457
                        .load(Uri.fromFile(new File(videoPath)))
457
                        .load(videoPath)
458 458
                        .apply(new RequestOptions().centerCrop())
459 459
                        .into(mItemVideo);
460 460
                mItemVideoLl.setVisibility(View.VISIBLE);

+ 0 - 135
app/src/main/java/com/electric/chargingpile/activity/QRChargingActivity.java

@ -1,135 +0,0 @@
1
package com.electric.chargingpile.activity;
2
3
import android.content.Intent;
4
import android.os.Bundle;
5
import androidx.fragment.app.FragmentActivity;
6
import androidx.viewpager.widget.ViewPager;
7
import android.view.View;
8
import android.widget.ImageView;
9
import android.widget.TextView;
10
11
import com.electric.chargingpile.R;
12
import com.electric.chargingpile.adapter.ViewPagerFragmentAdapter;
13
import com.electric.chargingpile.fragment.AnCiFragment;
14
import com.electric.chargingpile.fragment.YueFragment;
15
import com.electric.chargingpile.util.BarColorUtil;
16
import com.zhy.autolayout.AutoLayout;
17
18
public class QRChargingActivity extends FragmentActivity implements View.OnClickListener {
19
    private ImageView iv_back;
20
    private TextView tv_sure, tv_yue, tv_anci;
21
    private ViewPager viewPager;
22
    private AnCiFragment anCiFragment;
23
    private YueFragment yueFragment;
24
    private ViewPagerFragmentAdapter adapter;
25
    private MyListener listener = new MyListener();
26
27
    @Override
28
    protected void onCreate(Bundle savedInstanceState) {
29
        super.onCreate(savedInstanceState);
30
        AutoLayout.getInstance().auto(this);
31
        setContentView(R.layout.activity_qrcharging);
32
        BarColorUtil.initStatusBarColor(QRChargingActivity.this);
33
34
        initViews();
35
    }
36
37
    private void initViews() {
38
        iv_back = (ImageView) findViewById(R.id.iv_back);
39
        iv_back.setOnClickListener(this);
40
        tv_sure = (TextView) findViewById(R.id.tv_sure);
41
        tv_sure.setOnClickListener(this);
42
        tv_yue = (TextView) findViewById(R.id.tv_yue);
43
        tv_yue.setOnClickListener(this);
44
        tv_anci = (TextView) findViewById(R.id.tv_anci);
45
        tv_anci.setOnClickListener(this);
46
        viewPager = (ViewPager) findViewById(R.id.viewPager);
47
        yueFragment = new YueFragment();
48
        anCiFragment = new AnCiFragment();
49
        adapter = new ViewPagerFragmentAdapter(getSupportFragmentManager());
50
51
        adapter.addFragment(yueFragment);
52
        adapter.addFragment(anCiFragment);
53
54
        viewPager.setOffscreenPageLimit(2);
55
        viewPager.setOnPageChangeListener(listener);
56
        viewPager.setAdapter(adapter);
57
    }
58
59
    @Override
60
    public void onClick(View v) {
61
        switch (v.getId()) {
62
            case R.id.iv_back:
63
                finish();
64
                break;
65
            case R.id.tv_sure:
66
                startActivity(new Intent(getApplication(), ChargingStatusActivity.class));
67
                break;
68
            case R.id.tv_yue:
69
                viewPager.setCurrentItem(0);
70
//                AnCiFragment.cost_way = "";
71
//                AnCiFragment.cost_num = "";
72
//                AnCiFragment.tv_10.setTextColor(getResources().getColor(R.color.ui_65));
73
//                AnCiFragment.tv_20.setTextColor(getResources().getColor(R.color.ui_65));
74
//                AnCiFragment.tv_30.setTextColor(getResources().getColor(R.color.ui_65));
75
//                AnCiFragment.tv_10.setBackgroundResource(R.drawable.bg_huikuang);
76
//                AnCiFragment.tv_20.setBackgroundResource(R.drawable.bg_huikuang);
77
//                AnCiFragment.tv_30.setBackgroundResource(R.drawable.bg_huikuang);
78
//                AnCiFragment.iv_weixin.setImageResource(R.drawable.icon_wugou);
79
//                AnCiFragment.iv_zhifubao.setImageResource(R.drawable.icon_wugou);
80
//                AnCiFragment.et_costnum.setText("");
81
                break;
82
            case R.id.tv_anci:
83
                viewPager.setCurrentItem(1);
84
                break;
85
            default:
86
                break;
87
        }
88
    }
89
90
    public class MyListener implements ViewPager.OnPageChangeListener {
91
92
        @Override
93
        public void onPageScrollStateChanged(int arg0) {
94
95
        }
96
97
        @Override
98
        public void onPageScrolled(int position, float positionOffset,
99
                                   int positionOffsetPixels) {
100
//            resetViewPagerHeight(position);
101
        }
102
103
        @Override
104
        public void onPageSelected(int position) {
105
            // 页面切换后重置ViewPager高度
106
//            resetViewPagerHeight(position);
107
            setBackground(position);
108
        }
109
    }
110
111
    private void setBackground(int left) {
112
        if (left == 0) {
113
            tv_yue.setBackgroundResource(R.drawable.bg_lv);
114
            tv_anci.setBackgroundResource(R.drawable.bg_hui);
115
            tv_yue.setTextColor(getResources().getColor(R.color.lvse));
116
            tv_anci.setTextColor(getResources().getColor(R.color.ui_62));
117
        } else if (left == 1) {
118
            tv_anci.setBackgroundResource(R.drawable.bg_lv);
119
            tv_yue.setBackgroundResource(R.drawable.bg_hui);
120
            tv_yue.setTextColor(getResources().getColor(R.color.ui_62));
121
            tv_anci.setTextColor(getResources().getColor(R.color.lvse));
122
        }
123
124
    }
125
126
    @Override
127
    protected void onResume() {
128
        super.onResume();
129
    }
130
131
    @Override
132
    protected void onPause() {
133
        super.onPause();
134
    }
135
}

+ 31 - 10
app/src/main/java/com/electric/chargingpile/activity/RoutePlanMapActivity.java

@ -2,6 +2,8 @@ package com.electric.chargingpile.activity;
2 2
3 3
import android.animation.ValueAnimator;
4 4
import android.app.Activity;
5
import android.content.ContentResolver;
6
import android.content.ContentValues;
5 7
import android.content.Context;
6 8
import android.content.DialogInterface;
7 9
import android.content.Intent;
@ -18,8 +20,8 @@ import android.graphics.Matrix;
18 20
import android.graphics.drawable.BitmapDrawable;
19 21
import android.graphics.drawable.Drawable;
20 22
import android.net.Uri;
23
import android.os.Build;
21 24
import android.os.Bundle;
22
import android.os.Environment;
23 25
import android.os.Handler;
24 26
import android.provider.MediaStore;
25 27
@ -51,7 +53,7 @@ import com.amap.api.maps.AMapUtils;
51 53
import com.amap.api.maps.CameraUpdateFactory;
52 54
import com.amap.api.maps.LocationSource;
53 55
import com.amap.api.maps.MapView;
54
import com.amap.api.maps.UiSettings;
56
55 57
import com.amap.api.maps.model.BitmapDescriptorFactory;
56 58
import com.amap.api.maps.model.CameraPosition;
57 59
import com.amap.api.maps.model.LatLng;
@ -109,6 +111,7 @@ import com.electric.chargingpile.util.DES3S;
109 111
import com.electric.chargingpile.util.DensityUtil;
110 112
import com.electric.chargingpile.util.JsonUtils;
111 113
import com.electric.chargingpile.util.LoadingDialog;
114
import com.electric.chargingpile.util.PhotoUtils;
112 115
import com.electric.chargingpile.util.ToastUtil;
113 116
import com.electric.chargingpile.util.Util;
114 117
import com.electric.chargingpile.view.MyAutoLayout;
@ -127,6 +130,7 @@ import java.io.File;
127 130
import java.io.FileNotFoundException;
128 131
import java.io.FileOutputStream;
129 132
import java.io.IOException;
133
import java.io.OutputStream;
130 134
import java.net.URLEncoder;
131 135
import java.text.SimpleDateFormat;
132 136
import java.util.ArrayList;
@ -2578,7 +2582,7 @@ public class RoutePlanMapActivity extends Activity implements LocationSource, AM
2578 2582
                    return;
2579 2583
                }
2580 2584
                try {
2581
                    FileOutputStream fos = new FileOutputStream(Environment.getExternalStorageDirectory() + "/test_" + sdf.format(new Date()) + ".png");
2585
                    FileOutputStream fos = new FileOutputStream(PhotoUtils.CACHE_DIR + "/test_" + sdf.format(new Date()) + ".png");
2582 2586
                    try {
2583 2587
                        fos.flush();
2584 2588
                    } catch (IOException e) {
@ -2605,7 +2609,7 @@ public class RoutePlanMapActivity extends Activity implements LocationSource, AM
2605 2609
        paramsToShare.setTitle(null);
2606 2610
        paramsToShare.setTitleUrl(null);
2607 2611
        paramsToShare.setUrl("http://a.app.qq.com/o/simple.jsp?pkgname=com.electric.chargingpile");
2608
        paramsToShare.setImagePath(Environment.getExternalStorageDirectory() + File.separator + "d1ev/share.png");
2612
        paramsToShare.setImagePath(PhotoUtils.CACHE_DIR + File.separator + "d1ev/share.png");
2609 2613
        paramsToShare.setShareType(Platform.SHARE_IMAGE);
2610 2614
        Platform platform = ShareSDK.getPlatform(name);
2611 2615
        platform.setPlatformActionListener(new PlatformActionListener() {
@ -2738,8 +2742,9 @@ public class RoutePlanMapActivity extends Activity implements LocationSource, AM
2738 2742
    }
2739 2743
2740 2744
    public void saveBitmap(Bitmap mBitmap) {
2745
2741 2746
        LogUtils.e(mBitmap.getByteCount());
2742
        String dir_path = Environment.getExternalStorageDirectory() + File.separator + "d1ev/";
2747
        String dir_path = PhotoUtils.CACHE_DIR+ "d1ev/";
2743 2748
        File directory = new File(dir_path);
2744 2749
        File f = new File(directory, "share.png");
2745 2750
        try {
@ -2767,11 +2772,27 @@ public class RoutePlanMapActivity extends Activity implements LocationSource, AM
2767 2772
        } catch (IOException e) {
2768 2773
            e.printStackTrace();
2769 2774
        }
2770
        MediaStore.Images.Media.insertImage(getContentResolver(), mBitmap, "", "");
2771
        Intent intent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
2772
        Uri uri = Uri.fromFile(new File(dir_path));
2773
        intent.setData(uri);
2774
        getApplicationContext().sendBroadcast(intent);
2775
2776
        ContentResolver contentResolver = MainApplication.context.getContentResolver();
2777
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
2778
            Uri insert = contentResolver.insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, new ContentValues());
2779
            try {
2780
                OutputStream outputStream =  contentResolver.openOutputStream(insert);
2781
                if (outputStream!=null){
2782
                    mBitmap.compress(Bitmap.CompressFormat.JPEG, 100, outputStream);
2783
                }
2784
            } catch (FileNotFoundException e) {
2785
                e.printStackTrace();
2786
            }
2787
2788
        }else{
2789
            MediaStore.Images.Media.insertImage(contentResolver, mBitmap, "", "");
2790
            Intent intent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
2791
            Uri uri = PhotoUtils.parseUri(new File(dir_path));
2792
            intent.setData(uri);
2793
            getApplicationContext().sendBroadcast(intent);
2794
        }
2795
2775 2796
    }
2776 2797
2777 2798

+ 58 - 160
app/src/main/java/com/electric/chargingpile/activity/ShareTwoActivity.java

@ -12,19 +12,11 @@ import android.graphics.Bitmap;
12 12
import android.graphics.BitmapFactory;
13 13
import android.graphics.Color;
14 14
import android.graphics.Matrix;
15
import android.graphics.drawable.BitmapDrawable;
16 15
import android.graphics.drawable.ColorDrawable;
17
import android.net.Uri;
16
import android.os.Build;
18 17
import android.os.Bundle;
19
import android.os.Environment;
20 18
import android.os.Handler;
21 19
import android.os.Message;
22
import android.provider.MediaStore;
23
24
import androidx.annotation.NonNull;
25
import androidx.constraintlayout.widget.ConstraintLayout;
26
import androidx.core.content.FileProvider;
27
28 20
import android.util.Base64;
29 21
import android.util.Log;
30 22
import android.view.KeyEvent;
@ -49,18 +41,20 @@ import android.widget.TimePicker;
49 41
import android.widget.Toast;
50 42
import android.widget.ToggleButton;
51 43
44
import androidx.annotation.NonNull;
45
import androidx.constraintlayout.widget.ConstraintLayout;
46
52 47
import com.electric.chargingpile.R;
53 48
import com.electric.chargingpile.application.MainApplication;
54 49
import com.electric.chargingpile.data.OperatorData;
55 50
import com.electric.chargingpile.data.Zhan;
51
import com.electric.chargingpile.engine.GlideEngine;
56 52
import com.electric.chargingpile.manager.ProfileManager;
57 53
import com.electric.chargingpile.util.BarColorUtil;
58 54
import com.electric.chargingpile.util.Bimp;
59 55
import com.electric.chargingpile.util.DES3;
60 56
import com.electric.chargingpile.util.DensityUtil;
61
import com.electric.chargingpile.util.FileUtils;
62 57
import com.electric.chargingpile.util.ImageItem;
63
import com.electric.chargingpile.util.ImageUtils;
64 58
import com.electric.chargingpile.util.JsonUtils;
65 59
import com.electric.chargingpile.util.OkHttpUtil;
66 60
import com.electric.chargingpile.util.PublicWayFour;
@ -68,16 +62,18 @@ import com.electric.chargingpile.util.Res;
68 62
import com.electric.chargingpile.util.SharedPreferencesUtil;
69 63
import com.electric.chargingpile.util.ToastUtil;
70 64
import com.electric.chargingpile.util.UploadUtil;
65
import com.electric.chargingpile.util.Util;
71 66
import com.electric.chargingpile.view.CustomProgressDialog;
72 67
import com.electric.chargingpile.view.ShareDialog;
73 68
import com.google.gson.Gson;
74 69
import com.google.gson.reflect.TypeToken;
70
import com.luck.picture.lib.PictureSelector;
71
import com.luck.picture.lib.animators.AnimationType;
72
import com.luck.picture.lib.config.PictureConfig;
73
import com.luck.picture.lib.config.PictureMimeType;
74
import com.luck.picture.lib.entity.LocalMedia;
75 75
import com.squareup.okhttp.Request;
76 76
import com.squareup.okhttp.Response;
77
import com.zhihu.matisse.Matisse;
78
import com.zhihu.matisse.MimeType;
79
import com.zhihu.matisse.engine.impl.GlideEngine;
80
import com.zhihu.matisse.internal.entity.CaptureStrategy;
81 77
import com.zhy.http.okhttp.OkHttpUtils;
82 78
import com.zhy.http.okhttp.callback.StringCallback;
83 79
@ -86,7 +82,6 @@ import org.json.JSONObject;
86 82
87 83
import java.io.ByteArrayInputStream;
88 84
import java.io.ByteArrayOutputStream;
89
import java.io.File;
90 85
import java.io.IOException;
91 86
import java.text.DecimalFormat;
92 87
import java.util.ArrayList;
@ -118,9 +113,8 @@ public class ShareTwoActivity extends Activity implements View.OnClickListener,
118 113
    private TimePickerDialog tpd_close = null;
119 114
    private String camePath;//拍照路径
120 115
121
    private static final String PHOTO_FILE_NAME = "android.jpg";
122
    private static final String PHOTO_FILE_PATH = getPath(Environment.getExternalStorageDirectory() + "/" + "cdz");
123
    private File tempFile;
116
117
124 118
    private static final int PHOTO_REQUEST_CAMERA = 1;
125 119
    private static final int PHOTO_REQUEST_GALLERY = 2;
126 120
    private static final int PHOTO_REQUEST_CUT = 3;
@ -169,8 +163,7 @@ public class ShareTwoActivity extends Activity implements View.OnClickListener,
169 163
    private GridView noScrollgridview;
170 164
    private GridAdapter adapter;
171 165
    private View parentView;
172
    private PopupWindow pop = null;
173
    private LinearLayout ll_popup;
166
174 167
    private TextView open_time, close_time, share_list;
175 168
    private RelativeLayout rl_address;
176 169
    private ProgressDialog insertDialog;
@ -265,7 +258,6 @@ public class ShareTwoActivity extends Activity implements View.OnClickListener,
265 258
    @Override
266 259
    protected void onCreate(Bundle savedInstanceState) {
267 260
        super.onCreate(savedInstanceState);
268
        tempFile = getFile(PHOTO_FILE_PATH + "/" + PHOTO_FILE_NAME);
269 261
        Res.init(this);
270 262
        bimap = BitmapFactory.decodeResource(
271 263
                getResources(),
@ -323,65 +315,6 @@ public class ShareTwoActivity extends Activity implements View.OnClickListener,
323 315
        selectBitmap[2] = null;
324 316
        selectBitmap[3] = null;
325 317
326
        pop = new PopupWindow(ShareTwoActivity.this);
327
328
        View view = getLayoutInflater().inflate(R.layout.item_popupwindows, null);
329
330
        ll_popup = (LinearLayout) view.findViewById(R.id.ll_popup);
331
332
        pop.setWidth(ViewGroup.LayoutParams.MATCH_PARENT);
333
        pop.setHeight(ViewGroup.LayoutParams.WRAP_CONTENT);
334
        pop.setBackgroundDrawable(new BitmapDrawable());
335
        pop.setFocusable(true);
336
        pop.setOutsideTouchable(true);
337
        pop.setContentView(view);
338
339
        final RelativeLayout parent = (RelativeLayout) view.findViewById(R.id.parent);
340
        Button bt1 = (Button) view
341
                .findViewById(R.id.item_popupwindows_camera);
342
        Button bt2 = (Button) view
343
                .findViewById(R.id.item_popupwindows_Photo);
344
        Button bt3 = (Button) view
345
                .findViewById(R.id.item_popupwindows_cancel);
346
        parent.setOnClickListener(new View.OnClickListener() {
347
348
            @Override
349
            public void onClick(View v) {
350
                // TODO Auto-generated method stub
351
                pop.dismiss();
352
                ll_popup.clearAnimation();
353
            }
354
        });
355
        bt1.setOnClickListener(new View.OnClickListener() {
356
            public void onClick(View v) {
357
                pop.dismiss();
358
                ll_popup.clearAnimation();
359
360
                if (MainScanActivity.isCameraUseable()) {
361
                    photo();
362
                } else {
363
                    ToastUtil.showToast(getApplicationContext(), "您当前关闭了调用摄像头权限,可前往设置开启权限", Toast.LENGTH_SHORT);
364
                }
365
366
            }
367
        });
368
        bt2.setOnClickListener(new View.OnClickListener() {
369
            public void onClick(View v) {
370
                Intent intent = new Intent(ShareTwoActivity.this,
371
                        AlbumActivity.class);
372
                startActivity(intent);
373
                overridePendingTransition(R.anim.activity_translate_in, R.anim.activity_translate_out);
374
//                startActivityForResult(intent, 1);
375
                pop.dismiss();
376
                ll_popup.clearAnimation();
377
            }
378
        });
379
        bt3.setOnClickListener(new View.OnClickListener() {
380
            public void onClick(View v) {
381
                pop.dismiss();
382
                ll_popup.clearAnimation();
383
            }
384
        });
385 318
386 319
        noScrollgridview = (GridView) findViewById(R.id.noScrollgridview);
387 320
        noScrollgridview.setSelector(new ColorDrawable(Color.TRANSPARENT));
@ -411,6 +344,7 @@ public class ShareTwoActivity extends Activity implements View.OnClickListener,
411 344
     * 调用图库选择
412 345
     */
413 346
    private void callGallery() {
347
/*
414 348
        Matisse.from(ShareTwoActivity.this)
415 349
                .choose(MimeType.of(MimeType.JPEG, MimeType.PNG, MimeType.GIF))
416 350
                .showSingleMediaType(true)
@ -420,6 +354,26 @@ public class ShareTwoActivity extends Activity implements View.OnClickListener,
420 354
                .captureStrategy(new CaptureStrategy(true, "com.electric.chargingpile.provider"))
421 355
                .imageEngine(new GlideEngine())
422 356
                .forResult(REQUEST_CODE_CHOOSE);
357
*/
358
        PictureSelector.create(this)
359
                .openGallery(PictureMimeType.ofImage())
360
                .selectionMode(PictureConfig.SINGLE)
361
                .isCompress(true)//是否压缩
362
                .isSingleDirectReturn(true)
363
                .isPreviewEggs(true)//预览图片时是否增强左右滑动图片体验
364
                .isGif(true)//是否显示gif
365
                .isAndroidQTransform(true)
366
                .imageEngine(GlideEngine.createGlideEngine())
367
                .isWeChatStyle(false)// 是否开启微信图片选择风格
368
                .isUseCustomCamera(false)// 是否使用自定义相机
369
                .isPageStrategy(true)// 是否开启分页策略 & 每页多少条;默认开启
370
                .setPictureStyle(Util.getWhiteStyle(this))// 动态自定义相册主题
371
                .setRecyclerAnimationMode(AnimationType.SLIDE_IN_BOTTOM_ANIMATION)// 列表动画效果
372
                .isMaxSelectEnabledMask(true)// 选择数到了最大阀值列表是否启用蒙层效果
373
                .imageSpanCount(4)// 每行显示个数
374
                .isReturnEmpty(false)// 未选择数据时点击按钮是否可以返回
375
                .isAutomaticTitleRecyclerTop(true)//图片列表超过一屏连续点击顶部标题栏快速回滚至顶部
376
                .forResult(REQUEST_CODE_CHOOSE);
423 377
    }
424 378
425 379
    @Override
@ -449,20 +403,30 @@ public class ShareTwoActivity extends Activity implements View.OnClickListener,
449 403
            public void subscribe(ObservableEmitter<String> subscriber) throws Exception {
450 404
451 405
                try {
452
                    List<Uri> uriList = Matisse.obtainResult(data);
453
                    Uri uri = uriList.get(0);
454
                    Bitmap bitmap = BitmapFactory.decodeStream(getContentResolver().openInputStream(uri));
455
                    File file = FileUtils.from(ShareTwoActivity.this, uri);
456
457
                    bitmap = FileUtils.rotateIfRequired(file, bitmap);
458
                    bitmap = imageZoom(bitmap);
406
                    List<LocalMedia> mediaList = PictureSelector.obtainMultipleResult(data);
407
                    if (mediaList!=null && mediaList.size()>0){
408
                       /* List<Uri> uriList = Matisse.obtainResult(data);
409
                        Uri uri = uriList.get(0);
410
                        Bitmap bitmap = BitmapFactory.decodeStream(getContentResolver().openInputStream(uri));
411
                        File file = FileUtils.from(ShareTwoActivity.this, uri);
412
413
                        bitmap = FileUtils.rotateIfRequired(file, bitmap);
414
                        bitmap = imageZoom(bitmap);
415
*/
416
                        String path="";
417
                        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q){
418
                            path= mediaList.get(0).getAndroidQToPath();
419
                        }else{
420
                            path=mediaList.get(0).getPath();
421
                        }
422
                        ImageItem takePhoto = new ImageItem();
423
                        takePhoto.setBitmap(imageZoom(BitmapFactory.decodeFile(path)));
424
                        selectBitmap[selectIndex] = takePhoto;
459 425
460
                    ImageItem takePhoto = new ImageItem();
461
                    takePhoto.setBitmap(bitmap);
462
                    selectBitmap[selectIndex] = takePhoto;
426
                        subscriber.onNext("");
427
                        subscriber.onComplete();
428
                    }
463 429
464
                    subscriber.onNext("");
465
                    subscriber.onComplete();
466 430
                } catch (Exception e) {
467 431
                    e.printStackTrace();
468 432
                    subscriber.onError(e);
@ -1156,15 +1120,6 @@ public class ShareTwoActivity extends Activity implements View.OnClickListener,
1156 1120
1157 1121
    private static final int TAKE_PICTURE = 0x000001;
1158 1122
1159
    public void photo() {
1160
        if (hasSdcard()) {
1161
            Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
1162
            Uri photoURI = FileProvider.getUriForFile(getApplicationContext(), getApplicationContext().getPackageName() + ".provider", tempFile);
1163
            intent.putExtra(MediaStore.EXTRA_OUTPUT, photoURI);
1164
            startActivityForResult(intent, PHOTO_REQUEST_CAMERA);
1165
        }
1166
    }
1167
1168 1123
1169 1124
    @Override
1170 1125
    protected void onDestroy() {
@ -1172,64 +1127,7 @@ public class ShareTwoActivity extends Activity implements View.OnClickListener,
1172 1127
        Bimp.max = 0;
1173 1128
        super.onDestroy();
1174 1129
    }
1175
1176
1177
    private Bitmap compressBmpFromBmp(Bitmap image) {
1178
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
1179
        int options = 100;
1180
        image.compress(Bitmap.CompressFormat.JPEG, 60, baos);
1181
        while (baos.toByteArray().length / 1024 > 200) {
1182
            baos.reset();
1183
            options -= 10;
1184
            image.compress(Bitmap.CompressFormat.JPEG, options, baos);
1185
        }
1186
        ByteArrayInputStream isBm = new ByteArrayInputStream(baos.toByteArray());
1187
        Bitmap bitmap = BitmapFactory.decodeStream(isBm, null, null);
1188
        return bitmap;
1189
    }
1190
1191
1192
    private void crop(Uri uri, Uri cutImgUri) {
1193
        Intent intent = new Intent("com.android.camera.action.CROP");
1194
        intent.setDataAndType(uri, "image/*");
1195
        intent.putExtra("crop", "true");
1196
        intent.putExtra("outputFormat", "JPEG");
1197
        intent.putExtra("noFaceDetection", true);
1198
        intent.putExtra("return-data", false);
1199
        intent.putExtra(MediaStore.EXTRA_OUTPUT, cutImgUri);
1200
        startActivityForResult(intent, PHOTO_REQUEST_CUT);
1201
    }
1202
1203
    private boolean hasSdcard() {
1204
        if (Environment.getExternalStorageState().equals(
1205
                Environment.MEDIA_MOUNTED)) {
1206
            return true;
1207
        } else {
1208
            return false;
1209
        }
1210
    }
1211
1212
    private static String getPath(String path) {
1213
        File f = new File(path);
1214
        if (!f.exists()) {
1215
            f.mkdirs();
1216
        }
1217
        return f.getAbsolutePath();
1218
    }
1219
1220
    private File getFile(String path) {
1221
        File f = new File(path);
1222
        if (!f.exists()) {
1223
            try {
1224
                f.createNewFile();
1225
            } catch (IOException e) {
1226
                e.printStackTrace();
1227
            }
1228
        }
1229
        return f;
1230
    }
1231
1232
1130
    
1233 1131
    private Bitmap compressImage(Bitmap image) {
1234 1132
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
1235 1133
        image.compress(Bitmap.CompressFormat.JPEG, 80, baos);//质量压缩方法,这里100表示不压缩,把压缩后的数据存放到baos中

+ 63 - 133
app/src/main/java/com/electric/chargingpile/activity/ShareTwoEditActivity.java

@ -13,17 +13,11 @@ import android.graphics.Matrix;
13 13
import android.graphics.drawable.BitmapDrawable;
14 14
import android.graphics.drawable.Drawable;
15 15
import android.net.Uri;
16
import android.os.Build;
16 17
import android.os.Bundle;
17
import android.os.Environment;
18 18
import android.os.Handler;
19 19
import android.os.Message;
20 20
import android.provider.MediaStore;
21
22
import androidx.annotation.NonNull;
23
import androidx.annotation.Nullable;
24
import androidx.constraintlayout.widget.ConstraintLayout;
25
import androidx.core.content.FileProvider;
26
27 21
import android.util.Base64;
28 22
import android.util.Log;
29 23
import android.view.KeyEvent;
@ -33,7 +27,6 @@ import android.widget.Button;
33 27
import android.widget.EditText;
34 28
import android.widget.ImageView;
35 29
import android.widget.LinearLayout;
36
import android.widget.PopupWindow;
37 30
import android.widget.RadioButton;
38 31
import android.widget.RadioGroup;
39 32
import android.widget.RelativeLayout;
@ -43,6 +36,10 @@ import android.widget.TimePicker;
43 36
import android.widget.Toast;
44 37
import android.widget.ToggleButton;
45 38
39
import androidx.annotation.NonNull;
40
import androidx.annotation.Nullable;
41
import androidx.constraintlayout.widget.ConstraintLayout;
42
46 43
import com.bumptech.glide.Glide;
47 44
import com.bumptech.glide.load.DataSource;
48 45
import com.bumptech.glide.load.engine.GlideException;
@ -50,15 +47,12 @@ import com.bumptech.glide.request.RequestListener;
50 47
import com.bumptech.glide.request.target.Target;
51 48
import com.electric.chargingpile.R;
52 49
import com.electric.chargingpile.application.MainApplication;
53
import com.electric.chargingpile.data.OperatorData;
54 50
import com.electric.chargingpile.data.Zhan;
55
import com.electric.chargingpile.manager.ProfileManager;
51
import com.electric.chargingpile.engine.GlideEngine;
56 52
import com.electric.chargingpile.util.BarColorUtil;
57 53
import com.electric.chargingpile.util.DES3;
58 54
import com.electric.chargingpile.util.DensityUtil;
59
import com.electric.chargingpile.util.FileUtils;
60 55
import com.electric.chargingpile.util.ImageItem;
61
import com.electric.chargingpile.util.ImageUtils;
62 56
import com.electric.chargingpile.util.JsonUtils;
63 57
import com.electric.chargingpile.util.OkHttpUtil;
64 58
import com.electric.chargingpile.util.PublicWayFour;
@ -66,17 +60,17 @@ import com.electric.chargingpile.util.Res;
66 60
import com.electric.chargingpile.util.SharedPreferencesUtil;
67 61
import com.electric.chargingpile.util.ToastUtil;
68 62
import com.electric.chargingpile.util.UploadUtil;
63
import com.electric.chargingpile.util.Util;
69 64
import com.electric.chargingpile.view.CustomProgressDialog;
70 65
import com.electric.chargingpile.view.ShareDialog;
71
import com.google.gson.Gson;
72
import com.google.gson.reflect.TypeToken;
66
import com.luck.picture.lib.PictureSelector;
67
import com.luck.picture.lib.animators.AnimationType;
68
import com.luck.picture.lib.config.PictureConfig;
69
import com.luck.picture.lib.config.PictureMimeType;
70
import com.luck.picture.lib.entity.LocalMedia;
73 71
import com.squareup.okhttp.Request;
74 72
import com.squareup.okhttp.Response;
75 73
import com.tencent.bugly.crashreport.CrashReport;
76
import com.zhihu.matisse.Matisse;
77
import com.zhihu.matisse.MimeType;
78
import com.zhihu.matisse.engine.impl.GlideEngine;
79
import com.zhihu.matisse.internal.entity.CaptureStrategy;
80 74
import com.zhy.http.okhttp.OkHttpUtils;
81 75
import com.zhy.http.okhttp.callback.StringCallback;
82 76
@ -86,7 +80,6 @@ import org.json.JSONObject;
86 80
87 81
import java.io.ByteArrayInputStream;
88 82
import java.io.ByteArrayOutputStream;
89
import java.io.File;
90 83
import java.io.IOException;
91 84
import java.net.URLEncoder;
92 85
import java.text.DecimalFormat;
@ -119,9 +112,7 @@ public class ShareTwoEditActivity extends Activity implements View.OnClickListen
119 112
    private TimePickerDialog tpd_close = null;
120 113
    private String camePath;//拍照路径
121 114
122
    private static final String PHOTO_FILE_NAME = "android.jpg";
123
    private static final String PHOTO_FILE_PATH = getPath(Environment.getExternalStorageDirectory() + "/" + "cdz");
124
    private File tempFile;
115
125 116
    private static final int PHOTO_REQUEST_CAMERA = 1;
126 117
    private static final int PHOTO_REQUEST_GALLERY = 2;
127 118
    private static final int PHOTO_REQUEST_CUT = 3;
@ -156,8 +147,7 @@ public class ShareTwoEditActivity extends Activity implements View.OnClickListen
156 147
    private RadioGroup rg_claimtype, rg_park;
157 148
    public static Bitmap bimap;
158 149
    private View parentView;
159
    private PopupWindow pop = null;
160
    private LinearLayout ll_popup;
150
161 151
    private TextView open_time, close_time;
162 152
    private RelativeLayout rl_address;
163 153
    private ProgressDialog insertDialog;
@ -252,7 +242,7 @@ public class ShareTwoEditActivity extends Activity implements View.OnClickListen
252 242
    @Override
253 243
    protected void onCreate(Bundle savedInstanceState) {
254 244
        super.onCreate(savedInstanceState);
255
        tempFile = getFile(PHOTO_FILE_PATH + "/" + PHOTO_FILE_NAME);
245
256 246
        Res.init(this);
257 247
        bimap = BitmapFactory.decodeResource(
258 248
                getResources(),
@ -303,70 +293,13 @@ public class ShareTwoEditActivity extends Activity implements View.OnClickListen
303 293
        selectBitmap[2] = null;
304 294
        selectBitmap[3] = null;
305 295
306
        pop = new PopupWindow(ShareTwoEditActivity.this);
307
308
        View view = getLayoutInflater().inflate(R.layout.item_popupwindows, null);
309
310
        ll_popup = (LinearLayout) view.findViewById(R.id.ll_popup);
311
312
        pop.setWidth(ViewGroup.LayoutParams.MATCH_PARENT);
313
        pop.setHeight(ViewGroup.LayoutParams.WRAP_CONTENT);
314
        pop.setBackgroundDrawable(new BitmapDrawable());
315
        pop.setFocusable(true);
316
        pop.setOutsideTouchable(true);
317
        pop.setContentView(view);
318
319
        final RelativeLayout parent = (RelativeLayout) view.findViewById(R.id.parent);
320
        Button bt1 = (Button) view
321
                .findViewById(R.id.item_popupwindows_camera);
322
        Button bt2 = (Button) view
323
                .findViewById(R.id.item_popupwindows_Photo);
324
        Button bt3 = (Button) view
325
                .findViewById(R.id.item_popupwindows_cancel);
326
        parent.setOnClickListener(new View.OnClickListener() {
327
328
            @Override
329
            public void onClick(View v) {
330
                // TODO Auto-generated method stub
331
                pop.dismiss();
332
                ll_popup.clearAnimation();
333
            }
334
        });
335
        bt1.setOnClickListener(new View.OnClickListener() {
336
            public void onClick(View v) {
337
                pop.dismiss();
338
                ll_popup.clearAnimation();
339
340
                if (MainScanActivity.isCameraUseable()) {
341
                    photo();
342
                } else {
343
                    ToastUtil.showToast(getApplicationContext(), "您当前关闭了调用摄像头权限,可前往设置开启权限", Toast.LENGTH_SHORT);
344
                }
345
346
            }
347
        });
348
        bt2.setOnClickListener(new View.OnClickListener() {
349
            public void onClick(View v) {
350
                Intent intent = new Intent(ShareTwoEditActivity.this,
351
                        AlbumActivity.class);
352
                startActivity(intent);
353
                overridePendingTransition(R.anim.activity_translate_in, R.anim.activity_translate_out);
354
                pop.dismiss();
355
                ll_popup.clearAnimation();
356
            }
357
        });
358
        bt3.setOnClickListener(new View.OnClickListener() {
359
            public void onClick(View v) {
360
                pop.dismiss();
361
                ll_popup.clearAnimation();
362
            }
363
        });
364 296
    }
365 297
366 298
    /**
367 299
     * 调用图库选择
368 300
     */
369 301
    private void callGallery() {
302
/*
370 303
        Matisse.from(ShareTwoEditActivity.this)
371 304
                .choose(MimeType.of(MimeType.JPEG, MimeType.PNG, MimeType.GIF))
372 305
                .showSingleMediaType(true)
@ -376,6 +309,27 @@ public class ShareTwoEditActivity extends Activity implements View.OnClickListen
376 309
                .captureStrategy(new CaptureStrategy(true, "com.electric.chargingpile.provider"))
377 310
                .imageEngine(new GlideEngine())
378 311
                .forResult(REQUEST_CODE_CHOOSE);
312
*/
313
        PictureSelector.create(this)
314
                .openGallery(PictureMimeType.ofImage())
315
                .selectionMode(PictureConfig.SINGLE)
316
                .isSingleDirectReturn(true)
317
                .isCompress(true)//是否压缩
318
                .isPreviewEggs(true)//预览图片时是否增强左右滑动图片体验
319
                .isGif(true)//是否显示gif
320
                .isAndroidQTransform(true)
321
                .imageEngine(GlideEngine.createGlideEngine())
322
                .isWeChatStyle(false)// 是否开启微信图片选择风格
323
                .isUseCustomCamera(false)// 是否使用自定义相机
324
                .isPageStrategy(true)// 是否开启分页策略 & 每页多少条;默认开启
325
                .setPictureStyle(Util.getWhiteStyle(this))// 动态自定义相册主题
326
                .setRecyclerAnimationMode(AnimationType.SLIDE_IN_BOTTOM_ANIMATION)// 列表动画效果
327
                .isMaxSelectEnabledMask(true)// 选择数到了最大阀值列表是否启用蒙层效果
328
                .imageSpanCount(4)// 每行显示个数
329
                .isReturnEmpty(false)// 未选择数据时点击按钮是否可以返回
330
                .isAutomaticTitleRecyclerTop(true)//图片列表超过一屏连续点击顶部标题栏快速回滚至顶部
331
                .forResult(REQUEST_CODE_CHOOSE);
332
379 333
    }
380 334
381 335
    @Override
@ -404,21 +358,33 @@ public class ShareTwoEditActivity extends Activity implements View.OnClickListen
404 358
            @Override
405 359
            public void subscribe(ObservableEmitter<String> subscriber) throws Exception {
406 360
                try {
407
                    List<Uri> uriList = Matisse.obtainResult(data);
408
                    Uri uri = uriList.get(0);
409
                    Bitmap bitmap = BitmapFactory.decodeStream(getContentResolver().openInputStream(uri));
410
                    File file = FileUtils.from(ShareTwoEditActivity.this, uri);
411
412
                    bitmap = FileUtils.rotateIfRequired(file, bitmap);
413
                    bitmap = imageZoom(bitmap);
414
415
                    ImageItem takePhoto = new ImageItem();
416
                    takePhoto.setBitmap(bitmap);
417
                    selectBitmap[selectIndex] = takePhoto;
418
                    isTakePhoto = true;
361
                    List<LocalMedia> mediaList = PictureSelector.obtainMultipleResult(data);
362
                    if (mediaList!=null && mediaList.size()>0){
363
                      /*  List<Uri> uriList = Matisse.obtainResult(data);
364
                        Uri uri = uriList.get(0);
365
                        Bitmap bitmap = BitmapFactory.decodeStream(getContentResolver().openInputStream(uri));
366
                        File file = FileUtils.from(ShareTwoEditActivity.this, uri);
367
368
                        bitmap = FileUtils.rotateIfRequired(file, bitmap);
369
                        bitmap = imageZoom(bitmap);
370
*/
371
                        String path="";
372
                        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q){
373
                            path= mediaList.get(0).getAndroidQToPath();
374
                        }else{
375
                            path=mediaList.get(0).getPath();
376
                        }
377
                        ImageItem takePhoto = new ImageItem();
378
                        takePhoto.setBitmap(imageZoom(BitmapFactory.decodeFile(path)));
379
                        selectBitmap[selectIndex] = takePhoto;
380
                        isTakePhoto = true;
381
382
                        subscriber.onNext("");
383
                        subscriber.onComplete();
384
                    }else{
385
                        subscriber.onError(new Exception(""));
386
                    }
419 387
420
                    subscriber.onNext("");
421
                    subscriber.onComplete();
422 388
                } catch (Exception e) {
423 389
                    e.printStackTrace();
424 390
                    subscriber.onError(e);
@ -1016,15 +982,6 @@ public class ShareTwoEditActivity extends Activity implements View.OnClickListen
1016 982
1017 983
    private static final int TAKE_PICTURE = 0x000001;
1018 984
1019
    public void photo() {
1020
        if (hasSdcard()) {
1021
            Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
1022
            Uri photoURI = FileProvider.getUriForFile(getApplicationContext(), getApplicationContext().getPackageName() + ".provider", tempFile);
1023
            intent.putExtra(MediaStore.EXTRA_OUTPUT, photoURI);
1024
            startActivityForResult(intent, PHOTO_REQUEST_CAMERA);
1025
        }
1026
    }
1027
1028 985
1029 986
    @Override
1030 987
    protected void onDestroy() {
@ -1058,34 +1015,7 @@ public class ShareTwoEditActivity extends Activity implements View.OnClickListen
1058 1015
        startActivityForResult(intent, PHOTO_REQUEST_CUT);
1059 1016
    }
1060 1017
1061
    private boolean hasSdcard() {
1062
        if (Environment.getExternalStorageState().equals(
1063
                Environment.MEDIA_MOUNTED)) {
1064
            return true;
1065
        } else {
1066
            return false;
1067
        }
1068
    }
1069
1070
    private static String getPath(String path) {
1071
        File f = new File(path);
1072
        if (!f.exists()) {
1073
            f.mkdirs();
1074
        }
1075
        return f.getAbsolutePath();
1076
    }
1077 1018
1078
    private File getFile(String path) {
1079
        File f = new File(path);
1080
        if (!f.exists()) {
1081
            try {
1082
                f.createNewFile();
1083
            } catch (IOException e) {
1084
                e.printStackTrace();
1085
            }
1086
        }
1087
        return f;
1088
    }
1089 1019
1090 1020
1091 1021
    private Bitmap compressImage(Bitmap image) {

+ 96 - 45
app/src/main/java/com/electric/chargingpile/activity/SkipUserInfoActivity.java

@ -45,6 +45,7 @@ import com.electric.chargingpile.application.MainApplication;
45 45
import com.electric.chargingpile.data.CarOwnerCertificateBean;
46 46
import com.electric.chargingpile.data.Cars;
47 47
import com.electric.chargingpile.data.Province;
48
import com.electric.chargingpile.engine.GlideEngine;
48 49
import com.electric.chargingpile.entity.CarModelEntity;
49 50
import com.electric.chargingpile.entity.CarSeriesEntity;
50 51
import com.electric.chargingpile.event.CarIntentModelEvent;
@ -62,12 +63,19 @@ import com.electric.chargingpile.util.PhotoUtils;
62 63
import com.electric.chargingpile.util.StatusConstants;
63 64
import com.electric.chargingpile.util.ToastUtil;
64 65
import com.electric.chargingpile.util.UploadUtil;
66
import com.electric.chargingpile.util.Util;
65 67
import com.electric.chargingpile.view.CustomProgressDialog;
66 68
import com.electric.chargingpile.view.RoundImageView;
67 69
import com.electric.chargingpile.view.xrichtext.SDCardUtil;
68 70
import com.google.gson.Gson;
71
import com.luck.picture.lib.PictureSelector;
72
import com.luck.picture.lib.animators.AnimationType;
73
import com.luck.picture.lib.config.PictureConfig;
74
import com.luck.picture.lib.config.PictureMimeType;
75
import com.luck.picture.lib.entity.LocalMedia;
69 76
import com.squareup.okhttp.Request;
70 77
import com.squareup.okhttp.Response;
78
import com.yalantis.ucrop.view.OverlayView;
71 79
import com.zhy.http.okhttp.OkHttpUtils;
72 80
import com.zhy.http.okhttp.callback.StringCallback;
73 81
@ -81,6 +89,7 @@ import org.json.JSONObject;
81 89
82 90
import java.io.ByteArrayOutputStream;
83 91
import java.io.File;
92
import java.io.FileOutputStream;
84 93
import java.io.IOException;
85 94
import java.net.URLEncoder;
86 95
import java.util.ArrayList;
@ -129,10 +138,7 @@ public class SkipUserInfoActivity extends Activity implements View.OnClickListen
129 138
    private TextView tv_point;
130 139
    private RelativeLayout rl_point;
131 140
    private Bitmap download_bmp;
132
    private File fileUri = new File(Environment.getExternalStorageDirectory().getPath() + "/photo.jpg");
133
    private File fileCropUri = new File(Environment.getExternalStorageDirectory().getPath() + "/crop_photo.jpg");
134
    private Uri imageUri;
135
    private Uri cropImageUri;
141
136 142
    private static final int RC_CAMERA_PERM = 123;
137 143
    private SkipUserInfoActivity activity;
138 144
@ -355,11 +361,7 @@ public class SkipUserInfoActivity extends Activity implements View.OnClickListen
355 361
        btn_two.setOnClickListener(new View.OnClickListener() {
356 362
            @Override
357 363
            public void onClick(View view) {
358
                Intent intent = new Intent(Intent.ACTION_PICK, null);
359
                intent.setDataAndType(
360
                        MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
361
                        "image/*");
362
                startActivityForResult(intent, 1);
364
                openPhotoAlbum();
363 365
                popupWindow.dismiss();
364 366
            }
365 367
        });
@ -466,7 +468,9 @@ public class SkipUserInfoActivity extends Activity implements View.OnClickListen
466 468
            case R.id.iv_right:
467 469
//                startActivity(new Intent(SkipUserInfoActivity.this,LoginActivity.class));
468 470
                Bitmap bmp = BitmapFactory.decodeResource(getResources(), R.drawable.icon_user1118);
469
                ImageTools.saveImageToGallery(getApplicationContext(), bmp, "user_icon");
471
//                ImageTools.saveImageToGallery(getApplicationContext(), bmp, "user_icon.jpg");
472
                String storePath = PhotoUtils.CACHE_DIR + File.separator + "cdz_android";
473
                PhotoUtils.saveBitmap(this,bmp,storePath,"user_icon.jpeg");
470 474
                ProfileManager.getInstance().setFirstPoint(SkipUserInfoActivity.this, "1");
471 475
                ActivityManagerApplication.destoryActivity("login");
472 476
                CreditActivity.canFresh = true;
@ -485,7 +489,7 @@ public class SkipUserInfoActivity extends Activity implements View.OnClickListen
485 489
                            shite("");
486 490
                        }
487 491
                    }).start();
488
                    if (mCarModelEntity!=null){
492
                    if (mCarModelEntity != null) {
489 493
                        requestCarIntentModel();
490 494
                    }
491 495
                    createDialog();
@ -510,16 +514,67 @@ public class SkipUserInfoActivity extends Activity implements View.OnClickListen
510 514
     * @param view
511 515
     */
512 516
    public void takePhoto(View view) {
513
        if (SDCardUtil.hasSdcard()) {
514
            imageUri = Uri.fromFile(fileUri);
515
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N)
516
                //通过FileProvider创建一个content类型的Uri
517
                imageUri = FileProvider.getUriForFile(SkipUserInfoActivity.this, "com.electric.chargingpile.provider", fileUri);
518
            PhotoUtils.takePicture(SkipUserInfoActivity.this, imageUri, 2);
519
        } else {
520
            Toast.makeText(SkipUserInfoActivity.this, "设备没有SD卡!", Toast.LENGTH_SHORT).show();
521
            Log.e("asd", "设备没有SD卡");
522
        }
517
        PictureSelector.create(this)
518
                .openCamera(PictureMimeType.ofImage())
519
                .selectionMode(PictureConfig.SINGLE)
520
                .isSingleDirectReturn(true)
521
                .isCompress(true)//是否压缩
522
                .isPreviewEggs(true)//预览图片时是否增强左右滑动图片体验
523
                .isGif(false)//是否显示gif
524
                .isAndroidQTransform(true)
525
                .imageEngine(GlideEngine.createGlideEngine())
526
                .isWeChatStyle(false)// 是否开启微信图片选择风格
527
                .isUseCustomCamera(false)// 是否使用自定义相机
528
                .isPageStrategy(true)// 是否开启分页策略 & 每页多少条;默认开启
529
                .setPictureStyle(Util.getWhiteStyle(this))// 动态自定义相册主题
530
                .setRecyclerAnimationMode(AnimationType.SLIDE_IN_BOTTOM_ANIMATION)// 列表动画效果
531
                .isMaxSelectEnabledMask(true)// 选择数到了最大阀值列表是否启用蒙层效果
532
                .imageSpanCount(4)// 每行显示个数
533
                .isReturnEmpty(false)// 未选择数据时点击按钮是否可以返回
534
                .isAutomaticTitleRecyclerTop(true)//图片列表超过一屏连续点击顶部标题栏快速回滚至顶部
535
                .isEnableCrop(true)
536
                .rotateEnabled(false)//裁剪是否可旋转图片
537
                .setCircleStrokeWidth(8)//设置圆形裁剪边框粗细
538
                .freeStyleCropMode(OverlayView.DEFAULT_FREESTYLE_CROP_MODE)// 裁剪框拖动模式
539
                .isCropDragSmoothToCenter(true)// 裁剪框拖动时图片自动跟随居中
540
                .circleDimmedLayer(true)// 是否开启圆形裁剪
541
                .isDragFrame(true)//是否可拖动裁剪框(固定)
542
                .showCropFrame(false)// 是否显示裁剪矩形边框 圆形裁剪时建议设为false
543
                .showCropGrid(false)//是否显示裁剪矩形网格 圆形裁剪时建议设为false
544
                .forResult(2);
545
546
    }
547
    private void openPhotoAlbum() {
548
        PictureSelector.create(this)
549
                .openGallery(PictureMimeType.ofImage())
550
                .isCamera(false)//列表是否显示拍照按钮
551
                .selectionMode(PictureConfig.SINGLE)
552
                .isSingleDirectReturn(true)//PictureConfig.SINGLE模式下是否直接返回
553
                .isCompress(true)//是否压缩
554
                .isPreviewEggs(true)//预览图片时是否增强左右滑动图片体验
555
                .isGif(false)//是否显示gif
556
                .isAndroidQTransform(true)
557
                .imageEngine(GlideEngine.createGlideEngine())
558
                .isWeChatStyle(false)// 是否开启微信图片选择风格
559
                .isUseCustomCamera(false)// 是否使用自定义相机
560
                .isPageStrategy(true)// 是否开启分页策略 & 每页多少条;默认开启
561
                .setPictureStyle(Util.getWhiteStyle(this))// 动态自定义相册主题
562
                .setRecyclerAnimationMode(AnimationType.SLIDE_IN_BOTTOM_ANIMATION)// 列表动画效果
563
                .isMaxSelectEnabledMask(true)// 选择数到了最大阀值列表是否启用蒙层效果
564
                .imageSpanCount(4)// 每行显示个数
565
                .isReturnEmpty(false)// 未选择数据时点击按钮是否可以返回
566
                .isAutomaticTitleRecyclerTop(true)//图片列表超过一屏连续点击顶部标题栏快速回滚至顶部
567
                .rotateEnabled(false)//裁剪是否可旋转图片
568
                .isEnableCrop(true)
569
                .rotateEnabled(false)//裁剪是否可旋转图片
570
                .setCircleStrokeWidth(8)//设置圆形裁剪边框粗细
571
                .freeStyleCropMode(OverlayView.DEFAULT_FREESTYLE_CROP_MODE)// 裁剪框拖动模式
572
                .isCropDragSmoothToCenter(true)// 裁剪框拖动时图片自动跟随居中
573
                .circleDimmedLayer(true)// 是否开启圆形裁剪
574
                .isDragFrame(true)//是否可拖动裁剪框(固定)
575
                .showCropFrame(false)// 是否显示裁剪矩形边框 圆形裁剪时建议设为false
576
                .showCropGrid(false)//是否显示裁剪矩形网格 圆形裁剪时建议设为false
577
                .forResult(1);
523 578
    }
524 579
525 580
    private boolean checkText() {
@ -671,34 +726,30 @@ public class SkipUserInfoActivity extends Activity implements View.OnClickListen
671 726
                car_type = select_chexing;
672 727
                break;
673 728
            case 1:
674
                if (SDCardUtil.hasSdcard()) {
675
                    cropImageUri = Uri.fromFile(fileCropUri);
676
                    Uri newUri = Uri.parse(PhotoUtils.getPath(this, data.getData()));
677
                    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N)
678
                        newUri = FileProvider.getUriForFile(this, "com.electric.chargingpile.provider", new File(newUri.getPath()));
679
                    PhotoUtils.cropImageUri(this, newUri, cropImageUri, 1, 1, output_X, output_Y, 3);
680
                } else {
681
                    Toast.makeText(SkipUserInfoActivity.this, "设备没有SD卡!", Toast.LENGTH_SHORT).show();
682
                }
683
                break;
684
            // 如果是调用相机拍照时
685 729
            case 2:
686
                cropImageUri = Uri.fromFile(fileCropUri);
687
                PhotoUtils.cropImageUri(this, imageUri, cropImageUri, 1, 1, output_X, output_Y, 3);
688
                break;
689
690
            // 取得裁剪后的图片
691
            case 3:
692
                photo = imageZoom(PhotoUtils.getBitmapFromUri(cropImageUri, this));
693
                if (photo != null) {
694
                    iconPic.setImageBitmap(photo);
695
                }
730
                activityResult(data);
696 731
                break;
697 732
            default:
698 733
                break;
699 734
        }
700 735
        ;
701 736
    }
737
    private void activityResult(Intent data) {
738
        List<LocalMedia> medias = PictureSelector.obtainMultipleResult(data);
739
        if (medias != null && medias.size() > 0) {
740
            String path = "";
741
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
742
                path = medias.get(0).getAndroidQToPath();
743
            } else {
744
                path = medias.get(0).getPath();
745
            }
746
            photo = imageZoom(BitmapFactory.decodeFile(path));
747
            if (photo != null) {
748
                iconPic.setImageBitmap(photo);
749
            }
750
751
        }
752
    }
702 753
703 754
    private Bitmap imageZoom(Bitmap bm) {
704 755
        // 图片允许最大空间 单位:KB
@ -1000,7 +1051,7 @@ public class SkipUserInfoActivity extends Activity implements View.OnClickListen
1000 1051
                            //获取意向车型
1001 1052
                            if (bean.getStatus() == 2 && isCarIntendedModel) {
1002 1053
                                CarSeriesEntity entity = gson.fromJson(bean.getChexing(), CarSeriesEntity.class);
1003
                                if (mCarModelEntity == null){
1054
                                if (mCarModelEntity == null) {
1004 1055
                                    carModel.setText(entity.getSeriesName());
1005 1056
                                }
1006 1057
                                isCarIntendedModel = false;
@ -1055,7 +1106,7 @@ public class SkipUserInfoActivity extends Activity implements View.OnClickListen
1055 1106
    /**
1056 1107
     * 意向车型Event
1057 1108
     */
1058
    @Subscribe(threadMode = ThreadMode.MAIN,sticky = true)
1109
    @Subscribe(threadMode = ThreadMode.MAIN, sticky = true)
1059 1110
    public void onCarModelEvent(CarIntentModelEvent event) {
1060 1111
        if (event != null) {
1061 1112
            mCarModelEntity = event.getCarModelEntity();
@ -1084,7 +1135,7 @@ public class SkipUserInfoActivity extends Activity implements View.OnClickListen
1084 1135
        map.put("token", token);
1085 1136
1086 1137
        Gson gson = new Gson();
1087
        if (mCarModelEntity == null){
1138
        if (mCarModelEntity == null) {
1088 1139
            return;
1089 1140
        }
1090 1141
        String chexing = gson.toJson(mCarModelEntity);

+ 0 - 72
app/src/main/java/com/electric/chargingpile/activity/TestProgressActivity.java

@ -1,72 +0,0 @@
1
package com.electric.chargingpile.activity;
2
3
import android.app.Activity;
4
import android.graphics.Rect;
5
import android.graphics.drawable.Drawable;
6
import android.os.Bundle;
7
import android.os.Handler;
8
import android.os.Message;
9
import android.view.View;
10
11
import com.electric.chargingpile.R;
12
import com.electric.chargingpile.view.SaundProgressBar;
13
14
public class TestProgressActivity extends Activity {
15
16
    private SaundProgressBar mPbar;
17
    private int progress = 0;
18
    private Message message;
19
    private Handler handler = new Handler() {
20
21
        @Override
22
        public void handleMessage(Message msg) {
23
            // TODO Auto-generated method stub
24
            super.handleMessage(msg);
25
            int p = msg.what;
26
            mPbar.setProgress(p);
27
        }
28
29
    };
30
31
    @Override
32
    protected void onCreate(Bundle savedInstanceState) {
33
        super.onCreate(savedInstanceState);
34
        setContentView(R.layout.activity_test_progress);
35
36
        mPbar = (SaundProgressBar) this.findViewById(R.id.regularprogressbar);
37
        mPbar.setMax(100);
38
39
        Drawable indicator = getResources().getDrawable(
40
                R.drawable.progress_indicator);
41
        Rect bounds = new Rect(0, 0, indicator.getIntrinsicWidth() + 5,
42
                indicator.getIntrinsicHeight());
43
        indicator.setBounds(bounds);
44
45
        mPbar.setProgressIndicator(indicator);
46
        mPbar.setProgress(0);
47
        mPbar.setVisibility(View.VISIBLE);
48
49
        new Thread(runnable).start();
50
    }
51
52
    Runnable runnable = new Runnable() {
53
54
        @Override
55
        public void run() {
56
            message = handler.obtainMessage();
57
            // TODO Auto-generated method stub
58
            try {
59
                for (int i = 1; i <= 100; i++) {
60
                    int x = progress++;
61
                    message.what = x;
62
                    handler.sendEmptyMessage(message.what);
63
                    Thread.sleep(1000);
64
                }
65
66
            } catch (InterruptedException e) {
67
                // TODO Auto-generated catch block
68
                e.printStackTrace();
69
            }
70
        }
71
    };
72
}

+ 0 - 18
app/src/main/java/com/electric/chargingpile/activity/TesttActivity.java

@ -1,18 +0,0 @@
1
package com.electric.chargingpile.activity;
2
3
import android.os.Bundle;
4
5
import com.electric.chargingpile.R;
6
import com.zhy.autolayout.AutoLayout;
7
import com.zhy.autolayout.AutoLayoutActivity;
8
9
public class TesttActivity extends AutoLayoutActivity {
10
11
    @Override
12
    protected void onCreate(Bundle savedInstanceState) {
13
        super.onCreate(savedInstanceState);
14
        setContentView(R.layout.activity_testt);
15
        AutoLayout.getInstance().auto(this, true);
16
    }
17
18
}

+ 5 - 7
app/src/main/java/com/electric/chargingpile/activity/UserCenterActivity.java

@ -17,14 +17,9 @@ import android.net.ConnectivityManager;
17 17
import android.net.NetworkInfo;
18 18
import android.net.Uri;
19 19
import android.os.Bundle;
20
import android.os.Environment;
21 20
import android.os.Handler;
22 21
import android.os.Message;
23 22
import android.os.Process;
24
25
import androidx.annotation.NonNull;
26
27
import android.text.TextUtils;
28 23
import android.util.Log;
29 24
import android.view.KeyEvent;
30 25
import android.view.View;
@ -37,6 +32,8 @@ import android.widget.TextView;
37 32
import android.widget.Toast;
38 33
import android.widget.ToggleButton;
39 34
35
import androidx.annotation.NonNull;
36
40 37
import com.amap.api.services.weather.LocalDayWeatherForecast;
41 38
import com.amap.api.services.weather.LocalWeatherForecast;
42 39
import com.amap.api.services.weather.LocalWeatherForecastResult;
@ -56,6 +53,7 @@ import com.electric.chargingpile.util.JsonUtils;
56 53
import com.electric.chargingpile.util.LoadingDialog;
57 54
import com.electric.chargingpile.util.NetUtil;
58 55
import com.electric.chargingpile.util.OkHttpUtil;
56
import com.electric.chargingpile.util.PhotoUtils;
59 57
import com.electric.chargingpile.util.PicassoUtil;
60 58
import com.electric.chargingpile.util.ScreenUtils;
61 59
import com.electric.chargingpile.util.Util;
@ -527,7 +525,7 @@ public class UserCenterActivity extends Activity implements View.OnClickListener
527 525
//        }
528 526
        if (MainApplication.userIcon.equals("V")) {
529 527
//            Log.e("1111", "11111");
530
            usericonbt = BitmapFactory.decodeFile(Environment.getExternalStorageDirectory() + File.separator + "d1ev/usericon");
528
            usericonbt = BitmapFactory.decodeFile(PhotoUtils.CACHE_DIR + "d1ev/usericon");
531 529
            userIcon.setImageBitmap(usericonbt);
532 530
        } else if (MainApplication.userIcon.equals("")) {
533 531
//            Log.e("2222", "22222");
@ -548,7 +546,7 @@ public class UserCenterActivity extends Activity implements View.OnClickListener
548 546
    }
549 547
550 548
    public void saveBitmap(Bitmap mBitmap) {
551
        String dir_path = Environment.getExternalStorageDirectory() + File.separator + "d1ev/";
549
        String dir_path = PhotoUtils.CACHE_DIR + "d1ev/";
552 550
        File directory = new File(dir_path);
553 551
        File f = new File(dir_path, "usericon");
554 552
        try {

+ 91 - 82
app/src/main/java/com/electric/chargingpile/activity/UserInfoActivity.java

@ -19,14 +19,9 @@ import android.graphics.drawable.Drawable;
19 19
import android.net.Uri;
20 20
import android.os.Build;
21 21
import android.os.Bundle;
22
import android.os.Environment;
23 22
import android.os.Handler;
24 23
import android.os.Looper;
25 24
import android.os.Message;
26
import android.provider.MediaStore;
27
28
import androidx.core.content.FileProvider;
29
30 25
import android.text.TextUtils;
31 26
import android.util.Log;
32 27
import android.view.Gravity;
@ -55,11 +50,10 @@ import com.electric.chargingpile.application.MainApplication;
55 50
import com.electric.chargingpile.data.CarOwnerCertificateBean;
56 51
import com.electric.chargingpile.data.Cars;
57 52
import com.electric.chargingpile.data.Province;
53
import com.electric.chargingpile.engine.GlideEngine;
58 54
import com.electric.chargingpile.entity.CarModelEntity;
59 55
import com.electric.chargingpile.entity.CarSeriesEntity;
60 56
import com.electric.chargingpile.event.CarIntentModelEvent;
61
import com.electric.chargingpile.event.CarModelEvent;
62
import com.electric.chargingpile.manager.PreferenceManager;
63 57
import com.electric.chargingpile.manager.ProfileManager;
64 58
import com.electric.chargingpile.util.BarColorUtil;
65 59
import com.electric.chargingpile.util.DES3;
@ -71,16 +65,21 @@ import com.electric.chargingpile.util.PhotoUtils;
71 65
import com.electric.chargingpile.util.StatusConstants;
72 66
import com.electric.chargingpile.util.ToastUtil;
73 67
import com.electric.chargingpile.util.UploadUtil;
74
import com.electric.chargingpile.view.AlertDialogTwo;
68
import com.electric.chargingpile.util.Util;
75 69
import com.electric.chargingpile.view.CustomProgressDialog;
76 70
import com.electric.chargingpile.view.RoundImageView;
77
import com.electric.chargingpile.view.xrichtext.SDCardUtil;
78 71
import com.google.gson.Gson;
72
import com.luck.picture.lib.PictureSelector;
73
import com.luck.picture.lib.animators.AnimationType;
74
import com.luck.picture.lib.config.PictureConfig;
75
import com.luck.picture.lib.config.PictureMimeType;
76
import com.luck.picture.lib.entity.LocalMedia;
79 77
import com.squareup.okhttp.Request;
80 78
import com.squareup.okhttp.Response;
81 79
import com.squareup.picasso.Picasso;
82 80
import com.squareup.picasso.Target;
83 81
import com.umeng.analytics.MobclickAgent;
82
import com.yalantis.ucrop.view.OverlayView;
84 83
import com.zhy.http.okhttp.OkHttpUtils;
85 84
import com.zhy.http.okhttp.callback.StringCallback;
86 85
@ -93,8 +92,6 @@ import org.json.JSONObject;
93 92
94 93
import java.io.ByteArrayInputStream;
95 94
import java.io.ByteArrayOutputStream;
96
import java.io.File;
97
import java.io.FileOutputStream;
98 95
import java.io.IOException;
99 96
import java.net.URLEncoder;
100 97
import java.util.ArrayList;
@ -145,10 +142,7 @@ public class UserInfoActivity extends Activity implements View.OnClickListener,
145 142
    private TextView tv_point;
146 143
    private RelativeLayout rl_point;
147 144
    private android.view.animation.Animation animation;
148
    private File fileUri = new File(Environment.getExternalStorageDirectory().getPath() + "/photo.jpg");
149
    private File fileCropUri = new File(Environment.getExternalStorageDirectory().getPath() + "/crop_photo.jpg");
150
    private Uri imageUri;
151
    private Uri cropImageUri;
145
152 146
    private static final int RC_CAMERA_PERM = 123;
153 147
    private LoadingDialog loadDialog;
154 148
    // -2 -> 去认证, -1 -> 认证失败,0 -> 审核中,1 -> 表示通过审核,2 -> 表示意向车型。
@ -520,11 +514,8 @@ public class UserInfoActivity extends Activity implements View.OnClickListener,
520 514
        btn_two.setOnClickListener(new View.OnClickListener() {
521 515
            @Override
522 516
            public void onClick(View view) {
523
                Intent intent = new Intent(Intent.ACTION_PICK, null);
524
                intent.setDataAndType(
525
                        MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
526
                        "image/*");
527
                startActivityForResult(intent, 1);
517
                openPhotoAlbum();
518
528 519
                popupWindow.dismiss();
529 520
            }
530 521
        });
@ -533,6 +524,7 @@ public class UserInfoActivity extends Activity implements View.OnClickListener,
533 524
    }
534 525
535 526
527
536 528
    public void shite(String s) {
537 529
538 530
        Map<String, String> par = new HashMap<String, String>();
@ -587,16 +579,67 @@ public class UserInfoActivity extends Activity implements View.OnClickListener,
587 579
     * @param view
588 580
     */
589 581
    public void takePhoto(View view) {
590
        if (SDCardUtil.hasSdcard()) {
591
            imageUri = Uri.fromFile(fileUri);
592
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N)
593
                //通过FileProvider创建一个content类型的Uri
594
                imageUri = FileProvider.getUriForFile(UserInfoActivity.this, "com.electric.chargingpile.provider", fileUri);
595
            PhotoUtils.takePicture(UserInfoActivity.this, imageUri, 2);
596
        } else {
597
            Toast.makeText(UserInfoActivity.this, "设备没有SD卡!", Toast.LENGTH_SHORT).show();
598
            Log.e("asd", "设备没有SD卡");
599
        }
582
583
        PictureSelector.create(this)
584
                .openCamera(PictureMimeType.ofImage())
585
                .selectionMode(PictureConfig.SINGLE)
586
                .isSingleDirectReturn(true)
587
                .isCompress(true)//是否压缩
588
                .isPreviewEggs(true)//预览图片时是否增强左右滑动图片体验
589
                .isGif(false)//是否显示gif
590
                .isAndroidQTransform(true)
591
                .imageEngine(GlideEngine.createGlideEngine())
592
                .isWeChatStyle(false)// 是否开启微信图片选择风格
593
                .isUseCustomCamera(false)// 是否使用自定义相机
594
                .isPageStrategy(true)// 是否开启分页策略 & 每页多少条;默认开启
595
                .setPictureStyle(Util.getWhiteStyle(this))// 动态自定义相册主题
596
                .setRecyclerAnimationMode(AnimationType.SLIDE_IN_BOTTOM_ANIMATION)// 列表动画效果
597
                .isMaxSelectEnabledMask(true)// 选择数到了最大阀值列表是否启用蒙层效果
598
                .imageSpanCount(4)// 每行显示个数
599
                .isReturnEmpty(false)// 未选择数据时点击按钮是否可以返回
600
                .isAutomaticTitleRecyclerTop(true)//图片列表超过一屏连续点击顶部标题栏快速回滚至顶部
601
                .isEnableCrop(true)
602
                .rotateEnabled(false)//裁剪是否可旋转图片
603
                .setCircleStrokeWidth(8)//设置圆形裁剪边框粗细
604
                .freeStyleCropMode(OverlayView.DEFAULT_FREESTYLE_CROP_MODE)// 裁剪框拖动模式
605
                .isCropDragSmoothToCenter(true)// 裁剪框拖动时图片自动跟随居中
606
                .circleDimmedLayer(true)// 是否开启圆形裁剪
607
                .isDragFrame(true)//是否可拖动裁剪框(固定)
608
                .showCropFrame(false)// 是否显示裁剪矩形边框 圆形裁剪时建议设为false
609
                .showCropGrid(false)//是否显示裁剪矩形网格 圆形裁剪时建议设为false
610
                .forResult(2);
611
    }
612
    private void openPhotoAlbum() {
613
        PictureSelector.create(UserInfoActivity.this)
614
                .openGallery(PictureMimeType.ofImage())
615
                .isCamera(false)//列表是否显示拍照按钮
616
                .selectionMode(PictureConfig.SINGLE)
617
                .isSingleDirectReturn(true)//PictureConfig.SINGLE模式下是否直接返回
618
                .isCompress(true)//是否压缩
619
                .isPreviewEggs(true)//预览图片时是否增强左右滑动图片体验
620
                .isGif(false)//是否显示gif
621
                .isAndroidQTransform(true)
622
                .imageEngine(GlideEngine.createGlideEngine())
623
                .isWeChatStyle(false)// 是否开启微信图片选择风格
624
                .isUseCustomCamera(false)// 是否使用自定义相机
625
                .isPageStrategy(true)// 是否开启分页策略 & 每页多少条;默认开启
626
                .setPictureStyle(Util.getWhiteStyle(UserInfoActivity.this))// 动态自定义相册主题
627
                .setRecyclerAnimationMode(AnimationType.SLIDE_IN_BOTTOM_ANIMATION)// 列表动画效果
628
                .isMaxSelectEnabledMask(true)// 选择数到了最大阀值列表是否启用蒙层效果
629
                .imageSpanCount(4)// 每行显示个数
630
                .isReturnEmpty(false)// 未选择数据时点击按钮是否可以返回
631
                .isAutomaticTitleRecyclerTop(true)//图片列表超过一屏连续点击顶部标题栏快速回滚至顶部
632
                .rotateEnabled(false)//裁剪是否可旋转图片
633
                .isEnableCrop(true)
634
                .rotateEnabled(false)//裁剪是否可旋转图片
635
                .setCircleStrokeWidth(8)//设置圆形裁剪边框粗细
636
                .freeStyleCropMode(OverlayView.DEFAULT_FREESTYLE_CROP_MODE)// 裁剪框拖动模式
637
                .isCropDragSmoothToCenter(true)// 裁剪框拖动时图片自动跟随居中
638
                .circleDimmedLayer(true)// 是否开启圆形裁剪
639
                .isDragFrame(true)//是否可拖动裁剪框(固定)
640
                .showCropFrame(false)// 是否显示裁剪矩形边框 圆形裁剪时建议设为false
641
                .showCropGrid(false)//是否显示裁剪矩形网格 圆形裁剪时建议设为false
642
                .forResult(1);
600 643
    }
601 644
602 645
    @AfterPermissionGranted(RC_CAMERA_PERM)
@ -714,37 +757,34 @@ public class UserInfoActivity extends Activity implements View.OnClickListener,
714 757
715 758
716 759
        switch (requestCode) {
717
            // 如果是直接从相册获取
718 760
            case 1:
719
                if (SDCardUtil.hasSdcard()) {
720
                    cropImageUri = Uri.fromFile(fileCropUri);
721
                    Uri newUri = Uri.parse(PhotoUtils.getPath(this, data.getData()));
722
                    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N)
723
                        newUri = FileProvider.getUriForFile(this, "com.electric.chargingpile.provider", new File(newUri.getPath()));
724
                    PhotoUtils.cropImageUri(this, newUri, cropImageUri, 1, 1, output_X, output_Y, 3);
725
                } else {
726
                    Toast.makeText(UserInfoActivity.this, "设备没有SD卡!", Toast.LENGTH_SHORT).show();
727
                }
728
                break;
729
            // 如果是调用相机拍照时
730 761
            case 2:
731
                cropImageUri = Uri.fromFile(fileCropUri);
732
                PhotoUtils.cropImageUri(this, imageUri, cropImageUri, 1, 1, output_X, output_Y, 3);
762
                activityResult(data);
733 763
                break;
734 764
735
            // 取得裁剪后的图片
736
            case 3:
737
                photo = imageZoom(PhotoUtils.getBitmapFromUri(cropImageUri, this));
738
                if (photo != null) {
739
                    iconPic.setImageBitmap(photo);
740
                }
741
                break;
742 765
            default:
743 766
                break;
744 767
        }
745 768
        ;
746 769
    }
747 770
771
    private void activityResult(Intent data) {
772
        List<LocalMedia> medias = PictureSelector.obtainMultipleResult(data);
773
        if (medias != null && medias.size() > 0) {
774
            String path = "";
775
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
776
                path = medias.get(0).getAndroidQToPath();
777
            } else {
778
                path = medias.get(0).getPath();
779
            }
780
            photo = imageZoom(BitmapFactory.decodeFile(path));
781
            if (photo != null) {
782
                iconPic.setImageBitmap(photo);
783
            }
784
785
        }
786
    }
787
748 788
    private Bitmap imageZoom(Bitmap bm) {
749 789
        // 图片允许最大空间 单位:KB
750 790
        double maxSize = 40.00;
@ -871,37 +911,6 @@ public class UserInfoActivity extends Activity implements View.OnClickListener,
871 911
        return output;
872 912
    }
873 913
874
    public void saveBitmap(Bitmap mBitmap) {
875
        String dir_path = Environment.getExternalStorageDirectory() + File.separator + "d1ev/";
876
        File directory = new File(dir_path);
877
        File f = new File(dir_path, "usericon");
878
        try {
879
            if (!directory.exists()) {
880
                directory.mkdir();//没有目录先创建目录
881
            }
882
            f.createNewFile();
883
        } catch (IOException e) {
884
            // TODO Auto-generated catch block
885
        }
886
        FileOutputStream fOut = null;
887
        try {
888
            fOut = new FileOutputStream(f);
889
        } catch (Exception e) {
890
            e.printStackTrace();
891
        }
892
        mBitmap.compress(Bitmap.CompressFormat.PNG, 100, fOut);
893
        try {
894
            fOut.flush();
895
        } catch (IOException e) {
896
            e.printStackTrace();
897
        }
898
        try {
899
            fOut.close();
900
        } catch (IOException e) {
901
            e.printStackTrace();
902
        }
903
    }
904
905 914
906 915
    Handler handle = new Handler(Looper.getMainLooper()) {
907 916
        public void handleMessage(Message msg) {

+ 2 - 31
app/src/main/java/com/electric/chargingpile/activity/WelcomeActivity.java

@ -48,6 +48,7 @@ import com.electric.chargingpile.util.BarColorUtil;
48 48
import com.electric.chargingpile.util.DES3;
49 49
import com.electric.chargingpile.util.JsonUtils;
50 50
import com.electric.chargingpile.util.OkHttpUtil;
51
import com.electric.chargingpile.util.PhotoUtils;
51 52
import com.electric.chargingpile.util.SystemTypeUtil;
52 53
import com.electric.chargingpile.view.AlertDialogTwo;
53 54
import com.electric.chargingpile.view.ViewPagerAdapter;
@ -100,7 +101,7 @@ public class WelcomeActivity extends Activity {
100 101
    public static String canCost = "";
101 102
    private static final int RC_CAMERA_PERM = 123;
102 103
    private static final int RC_SAVE_PERM = 124;
103
    private static final String MAP_FILE_PATH = getPath(Environment.getExternalStorageDirectory() + "/" + "cdz_map");
104
    private static final String MAP_FILE_PATH = getPath(PhotoUtils.CACHE_DIR + "/" + "cdz_map");
104 105

105 106

106 107
    private ImageView oneIv, twoIv, threeIv, fourIv;
@ -469,36 +470,6 @@ public class WelcomeActivity extends Activity {
469 470
    }
470 471

471 472

472
    public void saveBitmap(Bitmap mBitmap) {
473
        String dir_path = Environment.getExternalStorageDirectory() + File.separator + "d1ev/";
474
        File directory = new File(dir_path);
475
        File f = new File(dir_path, "welcome_pic");
476
        try {
477
            if (!directory.exists()) {
478
                directory.mkdir();//没有目录先创建目录
479
            }
480
            f.createNewFile();
481
        } catch (IOException e) {
482
            // TODO Auto-generated catch block
483
        }
484
        FileOutputStream fOut = null;
485
        try {
486
            fOut = new FileOutputStream(f);
487
        } catch (Exception e) {
488
            e.printStackTrace();
489
        }
490
        mBitmap.compress(Bitmap.CompressFormat.PNG, 100, fOut);
491
        try {
492
            fOut.flush();
493
        } catch (IOException e) {
494
            e.printStackTrace();
495
        }
496
        try {
497
            fOut.close();
498
        } catch (IOException e) {
499
            e.printStackTrace();
500
        }
501
    }
502 473

503 474
    private void getStartPic() {
504 475
        new Thread(new Runnable() {

+ 52 - 151
app/src/main/java/com/electric/chargingpile/activity/ZhanCommentActivity.java

@ -18,7 +18,7 @@ import android.graphics.drawable.ColorDrawable;
18 18
import android.net.Uri;
19 19
import android.os.Build;
20 20
import android.os.Bundle;
21
import android.os.Environment;
21
22 22
import android.os.Handler;
23 23
import android.os.Message;
24 24
import android.provider.MediaStore;
@ -50,6 +50,7 @@ import com.electric.chargingpile.application.MainApplication;
50 50
import com.electric.chargingpile.data.CommentsBean;
51 51
import com.electric.chargingpile.data.MyOtto;
52 52
import com.electric.chargingpile.data.RObject;
53
import com.electric.chargingpile.engine.GlideEngine;
53 54
import com.electric.chargingpile.util.BarColorUtil;
54 55
import com.electric.chargingpile.util.Bimp;
55 56
import com.electric.chargingpile.util.DES3;
@ -59,18 +60,22 @@ import com.electric.chargingpile.util.ImageUtils;
59 60
import com.electric.chargingpile.util.JsonUtils;
60 61
import com.electric.chargingpile.util.LoadingDialog;
61 62
import com.electric.chargingpile.util.Md5Util;
63
import com.electric.chargingpile.util.PhotoUtils;
62 64
import com.electric.chargingpile.util.PublicWayONE;
63 65
import com.electric.chargingpile.util.Res;
64 66
import com.electric.chargingpile.util.ScreenUtils;
65 67
import com.electric.chargingpile.util.StatusConstants;
66 68
import com.electric.chargingpile.util.ToastUtil;
67 69
import com.electric.chargingpile.util.UploadUtil;
70
import com.electric.chargingpile.util.Util;
68 71
import com.electric.chargingpile.view.REditText;
69 72
import com.electric.chargingpile.view.RatingBarView;
70
import com.zhihu.matisse.Matisse;
71
import com.zhihu.matisse.MimeType;
72
import com.zhihu.matisse.engine.impl.GlideEngine;
73
import com.zhihu.matisse.internal.entity.CaptureStrategy;
73
74
import com.luck.picture.lib.PictureSelector;
75
import com.luck.picture.lib.animators.AnimationType;
76
import com.luck.picture.lib.config.PictureConfig;
77
import com.luck.picture.lib.config.PictureMimeType;
78
import com.luck.picture.lib.entity.LocalMedia;
74 79
import com.zhy.http.okhttp.OkHttpUtils;
75 80
import com.zhy.http.okhttp.callback.StringCallback;
76 81
import com.zhy.view.flowlayout.FlowLayout;
@ -127,12 +132,12 @@ public class ZhanCommentActivity extends Activity implements View.OnClickListene
127 132
    private String select_s = "";
128 133
    private String select_ss = "";
129 134
    private TextView tv_grade, tv_point;
130
    private File tempFile;
135
131 136
    private static String PHOTO_FILE_NAME = "";
132
    private static final String PHOTO_FILE_PATH = getPath(Environment.getExternalStorageDirectory() + "/" + "cdz");
137
    private static final String PHOTO_FILE_PATH = getPath(PhotoUtils.CACHE_DIR);
133 138
    public static Bitmap bimap;
134
    private PopupWindow pop = null;
135
    private LinearLayout ll_popup;
139
140
136 141
    private GridView noScrollgridview;
137 142
    private GridAdapter adapter;
138 143
    private static final int PHOTO_REQUEST_CAMERA = 1;
@ -177,7 +182,7 @@ public class ZhanCommentActivity extends Activity implements View.OnClickListene
177 182
            super.handleMessage(msg);
178 183
        }
179 184
    };
180
185
    private List<LocalMedia> mSelectionData =new ArrayList<LocalMedia>();
181 186
    @Override
182 187
    protected void onCreate(Bundle savedInstanceState) {
183 188
        super.onCreate(savedInstanceState);
@ -188,9 +193,6 @@ public class ZhanCommentActivity extends Activity implements View.OnClickListene
188 193
        intentFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE");
189 194
        networkChangeReceiver = new NetworkChangeReceiver();
190 195
        registerReceiver(networkChangeReceiver, intentFilter);
191
        long appTime1 = System.currentTimeMillis() / 1000;
192
        PHOTO_FILE_NAME = "android" + appTime1 + ".jpg";
193
        tempFile = getFile(PHOTO_FILE_PATH + "/" + PHOTO_FILE_NAME);
194 196
        MyOtto.getInstance().unregister(this);
195 197
        Res.init(this);
196 198
        bimap = BitmapFactory.decodeResource(
@ -441,53 +443,6 @@ public class ZhanCommentActivity extends Activity implements View.OnClickListene
441 443
    }
442 444
443 445
    public void Init() {
444
        pop = new PopupWindow(ZhanCommentActivity.this);
445
        View view = getLayoutInflater().inflate(R.layout.item_popupwindows, null);
446
        ll_popup = (LinearLayout) view.findViewById(R.id.ll_popup);
447
448
        pop.setWidth(ViewGroup.LayoutParams.MATCH_PARENT);
449
        pop.setHeight(ViewGroup.LayoutParams.WRAP_CONTENT);
450
        pop.setBackgroundDrawable(new BitmapDrawable());
451
        pop.setFocusable(true);
452
        pop.setOutsideTouchable(true);
453
        pop.setContentView(view);
454
455
456
        final RelativeLayout parent = (RelativeLayout) view.findViewById(R.id.parent);
457
        Button bt1 = (Button) view.findViewById(R.id.item_popupwindows_camera);
458
        Button bt2 = (Button) view.findViewById(R.id.item_popupwindows_Photo);
459
        Button bt3 = (Button) view.findViewById(R.id.item_popupwindows_cancel);
460
        parent.setOnClickListener(new View.OnClickListener() {
461
462
            @Override
463
            public void onClick(View v) {
464
                // TODO Auto-generated method stub
465
                pop.dismiss();
466
                ll_popup.clearAnimation();
467
            }
468
        });
469
        bt1.setOnClickListener(new View.OnClickListener() {
470
            public void onClick(View v) {
471
                photo();
472
                pop.dismiss();
473
                ll_popup.clearAnimation();
474
            }
475
        });
476
        bt2.setOnClickListener(new View.OnClickListener() {
477
            public void onClick(View v) {
478
                Intent intent = new Intent(ZhanCommentActivity.this, AlbumActivityComment.class);
479
                startActivity(intent);
480
                overridePendingTransition(R.anim.activity_translate_in, R.anim.activity_translate_out);
481
                pop.dismiss();
482
                ll_popup.clearAnimation();
483
            }
484
        });
485
        bt3.setOnClickListener(new View.OnClickListener() {
486
            public void onClick(View v) {
487
                pop.dismiss();
488
                ll_popup.clearAnimation();
489
            }
490
        });
491 446
492 447
        noScrollgridview = (GridView) findViewById(R.id.noScrollgridview);
493 448
        noScrollgridview.setSelector(new ColorDrawable(Color.TRANSPARENT));
@ -518,14 +473,25 @@ public class ZhanCommentActivity extends Activity implements View.OnClickListene
518 473
     * 调用图库选择
519 474
     */
520 475
    private void callGallery() {
521
        Matisse.from(ZhanCommentActivity.this)
522
                .choose(MimeType.of(MimeType.JPEG, MimeType.PNG, MimeType.GIF))
523
                .showSingleMediaType(true)
524
                .countable(true)
525
                .maxSelectable(PIC_NUM - Bimp.tempSelectBitmap.size())
526
                .capture(true)
527
                .captureStrategy(new CaptureStrategy(true, "com.electric.chargingpile.provider"))
528
                .imageEngine(new GlideEngine())
476
        PictureSelector.create(this)
477
                .openGallery(PictureMimeType.ofImage())
478
                .maxSelectNum(PIC_NUM)
479
                .selectionMode(PictureConfig.MULTIPLE)
480
                .selectionData(mSelectionData)//是否传入已选图片
481
                .isCompress(true)//是否压缩
482
                .isPreviewEggs(true)//预览图片时是否增强左右滑动图片体验
483
                .isGif(true)//是否显示gif
484
                .isAndroidQTransform(true)
485
                .imageEngine(GlideEngine.createGlideEngine())
486
                .isWeChatStyle(false)// 是否开启微信图片选择风格
487
                .isUseCustomCamera(false)// 是否使用自定义相机
488
                .isPageStrategy(true)// 是否开启分页策略 & 每页多少条;默认开启
489
                .setPictureStyle(Util.getWhiteStyle(this))// 动态自定义相册主题
490
                .setRecyclerAnimationMode(AnimationType.SLIDE_IN_BOTTOM_ANIMATION)// 列表动画效果
491
                .isMaxSelectEnabledMask(true)// 选择数到了最大阀值列表是否启用蒙层效果
492
                .imageSpanCount(4)// 每行显示个数
493
                .isReturnEmpty(false)// 未选择数据时点击按钮是否可以返回
494
                .isAutomaticTitleRecyclerTop(true)//图片列表超过一屏连续点击顶部标题栏快速回滚至顶部
529 495
                .forResult(REQUEST_CODE_CHOOSE);
530 496
    }
531 497
@ -555,15 +521,25 @@ public class ZhanCommentActivity extends Activity implements View.OnClickListene
555 521
            @Override
556 522
            public void subscribe(ObservableEmitter<String> subscriber) throws Exception {
557 523
                try {
558
                    List<Uri> uriList = Matisse.obtainResult(data);
559
                    for (Uri uri : uriList) {
560
                        Bitmap bitmap = BitmapFactory.decodeStream(getContentResolver().openInputStream(uri));
561
                        File file = FileUtils.from(ZhanCommentActivity.this, uri);
562
563
                        bitmap = FileUtils.rotateIfRequired(file, bitmap);
564
                        bitmap = imageZoom(bitmap);
524
//                    List<Uri> uriList = Matisse.obtainResult(data);
525
                    mSelectionData= PictureSelector.obtainMultipleResult(data);
526
                    for (LocalMedia media : mSelectionData) {
527
//                        Bitmap bitmap = BitmapFactory.decodeStream(getContentResolver().openInputStream(uri));
528
//                        File file = FileUtils.from(ZhanCommentActivity.this, uri);
529
//
530
//                        bitmap = FileUtils.rotateIfRequired(file, bitmap);
531
//                        bitmap = imageZoom(bitmap);
532
//                        ImageItem takePhoto = new ImageItem();
533
//                        takePhoto.setBitmap(bitmap);
534
//                        Bimp.tempSelectBitmap.add(takePhoto);
535
                        String path="";
536
                        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q){
537
                            path= media.getAndroidQToPath();
538
                        }else{
539
                            path=media.getPath();
540
                        }
565 541
                        ImageItem takePhoto = new ImageItem();
566
                        takePhoto.setBitmap(bitmap);
542
                        takePhoto.setBitmap(imageZoom(BitmapFactory.decodeFile(path)));
567 543
                        Bimp.tempSelectBitmap.add(takePhoto);
568 544
                        subscriber.onNext("");
569 545
                    }
@ -1045,82 +1021,7 @@ public class ZhanCommentActivity extends Activity implements View.OnClickListene
1045 1021
        }
1046 1022
    }
1047 1023
1048
    public void photo() {
1049
        if (hasSdcard()) {
1050
            int currentapiVersion = Build.VERSION.SDK_INT;
1051
            Log.e("currentapiVersion", "currentapiVersion====>" + currentapiVersion);
1052
            Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);//���������
1053
            intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(tempFile));
1054
            startActivityForResult(intent, PHOTO_REQUEST_CAMERA);
1055
        }
1056
    }
1057
1058
    private boolean hasSdcard() {
1059
        if (Environment.getExternalStorageState().equals(
1060
                Environment.MEDIA_MOUNTED)) {
1061
            return true;
1062
        } else {
1063
            return false;
1064
        }
1065
    }
1066 1024
1067
    private void crop(Uri uri, Uri cutImgUri) {
1068
        // �ü�ͼƬ��ͼ
1069
        Intent intent = new Intent("com.android.camera.action.CROP");
1070
        intent.setDataAndType(getImageContentUri(this, tempFile), "image/*");
1071
1072
        intent.putExtra("crop", "true");
1073
        // �ü���ı�����1��1
1074
//        intent.putExtra("aspectX", 16);
1075
//        intent.putExtra("aspectY", 9);
1076
//        // �ü������ͼƬ�ijߴ��С
1077
//        intent.putExtra("outputX", 900);
1078
//        intent.putExtra("outputY", 540);
1079
//        intent.putExtra("scale", false);
1080
1081
        // ͼƬ��ʽ
1082
        intent.putExtra("outputFormat", "JPEG");
1083
        intent.putExtra("noFaceDetection", true);// ȡ������ʶ��
1084
        intent.putExtra("return-data", false);// true:������uri��false������uri
1085
        intent.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(tempFile));//д���ȡ��ͼƬ
1086
        startActivityForResult(intent, PHOTO_REQUEST_CUT);
1087
    }
1088
1089
    public static Uri getImageContentUri(Context context, File imageFile) {
1090
        String filePath = imageFile.getAbsolutePath();
1091
        Cursor cursor = context.getContentResolver().query(
1092
                MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
1093
                new String[]{MediaStore.Images.Media._ID},
1094
                MediaStore.Images.Media.DATA + "=? ",
1095
                new String[]{filePath}, null);
1096
1097
        if (cursor != null && cursor.moveToFirst()) {
1098
            int id = cursor.getInt(cursor
1099
                    .getColumnIndex(MediaStore.MediaColumns._ID));
1100
            Uri baseUri = Uri.parse("content://media/external/images/media");
1101
            return Uri.withAppendedPath(baseUri, "" + id);
1102
        } else {
1103
            if (imageFile.exists()) {
1104
                ContentValues values = new ContentValues();
1105
                values.put(MediaStore.Images.Media.DATA, filePath);
1106
                return context.getContentResolver().insert(
1107
                        MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);
1108
            } else {
1109
                return null;
1110
            }
1111
        }
1112
    }
1113
1114
    public Bitmap decodeUriAsBitmap(Uri uri) {
1115
        Bitmap bitmap = null;
1116
        try {
1117
            bitmap = BitmapFactory.decodeStream(this.getContentResolver().openInputStream(uri));
1118
        } catch (FileNotFoundException e) {
1119
            e.printStackTrace();
1120
            return null;
1121
        }
1122
        return bitmap;
1123
    }
1124 1025
1125 1026
    protected void onRestart() {
1126 1027
        adapter.update();

+ 6 - 55
app/src/main/java/com/electric/chargingpile/activity/ZoomingPhotoTextActivity.java

@ -1,15 +1,7 @@
1 1
package com.electric.chargingpile.activity;
2 2
3 3
import android.content.Intent;
4
import android.graphics.Bitmap;
5 4
import android.os.Bundle;
6
import android.os.Environment;
7
import android.provider.MediaStore;
8
import androidx.fragment.app.Fragment;
9
import androidx.fragment.app.FragmentActivity;
10
import androidx.fragment.app.FragmentManager;
11
import androidx.fragment.app.FragmentStatePagerAdapter;
12
import androidx.viewpager.widget.ViewPager.OnPageChangeListener;
13 5
import android.text.TextUtils;
14 6
import android.view.View;
15 7
import android.view.Window;
@ -20,6 +12,12 @@ import android.widget.ScrollView;
20 12
import android.widget.TextView;
21 13
import android.widget.Toast;
22 14
15
import androidx.fragment.app.Fragment;
16
import androidx.fragment.app.FragmentActivity;
17
import androidx.fragment.app.FragmentManager;
18
import androidx.fragment.app.FragmentStatePagerAdapter;
19
import androidx.viewpager.widget.ViewPager.OnPageChangeListener;
20
23 21
import com.electric.chargingpile.R;
24 22
import com.electric.chargingpile.application.MainApplication;
25 23
import com.electric.chargingpile.data.TopicDetailBean;
@ -34,10 +32,6 @@ import com.umeng.analytics.MobclickAgent;
34 32
import com.zhy.http.okhttp.OkHttpUtils;
35 33
import com.zhy.http.okhttp.callback.StringCallback;
36 34
37
import java.io.File;
38
import java.io.FileNotFoundException;
39
import java.io.FileOutputStream;
40
import java.io.IOException;
41 35
import java.util.ArrayList;
42 36
import java.util.HashMap;
43 37
import java.util.Map;
@ -212,49 +206,6 @@ public class ZoomingPhotoTextActivity extends FragmentActivity implements PhotoV
212 206
        // finish();
213 207
    }
214 208
215
    public void saveBitmap(String picName, Bitmap bm) {
216
        if (bm != null) {
217
            String result = "";
218
            String folder = Environment.getExternalStorageDirectory().getAbsoluteFile() + File.separator + "touch/img/";
219
            File folderFile = new File(folder);
220
            try {
221
                if (!folderFile.exists()) {
222
                    folderFile.mkdirs();
223
                }
224
                File f = new File(folder, picName);
225
                if (!f.exists()) {
226
                    f.createNewFile();
227
                }
228
229
                FileOutputStream out = new FileOutputStream(f);
230
                bm.compress(Bitmap.CompressFormat.PNG, 90, out);
231
                out.flush();
232
                out.close();
233
                result = "success_sd";
234
                // 其次把文件插入到系统图库
235
                MediaStore.Images.Media.insertImage(getBaseContext().getContentResolver(),
236
                        f.getAbsolutePath(), picName, null);
237
                result = "success";
238
            } catch (FileNotFoundException e) {
239
                // TODO Auto-generated catch block
240
                e.printStackTrace();
241
                result = "fail";
242
            } catch (IOException e) {
243
                // TODO Auto-generated catch block
244
                e.printStackTrace();
245
                result = "fail";
246
            }
247
//            bm.recycle();
248
//            bm = null;
249
            if ("success".equals(result)) {
250
                Toast.makeText(this, "已成功保存到相册", Toast.LENGTH_SHORT).show();
251
            } else if ("success_sd".equals(result)) {
252
                Toast.makeText(this, "已成功保存到内存卡", Toast.LENGTH_SHORT).show();
253
            } else {
254
                Toast.makeText(this, "保存失败", Toast.LENGTH_SHORT).show();
255
            }
256
        }
257
    }
258 209
259 210
    @Override
260 211
    public void onClick(View v) {

+ 4 - 4
app/src/main/java/com/electric/chargingpile/application/MainApplication.java

@ -5,7 +5,7 @@ import android.content.Context;
5 5
import android.database.sqlite.SQLiteDatabase;
6 6
import android.graphics.Bitmap;
7 7
import android.os.Build;
8
import android.os.Environment;
8

9 9
import android.os.StrictMode;
10 10
import android.text.TextUtils;
11 11
import android.util.Log;
@ -27,6 +27,7 @@ import com.electric.chargingpile.gen.DaoSession;
27 27
import com.electric.chargingpile.manager.ProfileManager;
28 28
import com.electric.chargingpile.util.DES3;
29 29
import com.electric.chargingpile.util.JsonUtils;
30
import com.electric.chargingpile.util.PhotoUtils;
30 31
import com.electric.chargingpile.util.SharedPreferencesHelper;
31 32
import com.google.gson.Gson;
32 33
import com.mob.MobSDK;
@ -38,7 +39,6 @@ import com.nostra13.universalimageloader.core.assist.ImageScaleType;
38 39
import com.tencent.bugly.crashreport.CrashReport;
39 40
import com.zhy.http.okhttp.OkHttpUtils;
40 41
import com.zhy.http.okhttp.callback.StringCallback;
41
import com.zhy.http.okhttp.log.LoggerInterceptor;
42 42

43 43
import java.io.BufferedReader;
44 44
import java.io.BufferedWriter;
@ -56,7 +56,6 @@ import java.util.Map;
56 56

57 57
import cn.jpush.android.api.JPushInterface;
58 58
import okhttp3.Call;
59
import okhttp3.OkHttpClient;
60 59

61 60

62 61
public class MainApplication extends MultiDexApplication {
@ -142,7 +141,7 @@ public class MainApplication extends MultiDexApplication {
142 141
    public static Double search_jing = 0.0, search_wei = 0.0;
143 142
    public static Context context;
144 143
    public static String current_code = "3.5";
145
    public static String storePath = Environment.getExternalStorageDirectory().getAbsolutePath() + File.separator + "cdz_android";
144
    public static String storePath = "";
146 145
    public static String q_content = "";
147 146
    public static Map<String, String> q_map = new HashMap<>();
148 147
    public static boolean isAppStart;
@ -156,6 +155,7 @@ public class MainApplication extends MultiDexApplication {
156 155
    public void onCreate() {
157 156
        super.onCreate();
158 157
        this.context = getApplicationContext();
158
        storePath = PhotoUtils.CACHE_DIR;
159 159
        StrictMode.VmPolicy.Builder builder = new StrictMode.VmPolicy.Builder();
160 160
        StrictMode.setVmPolicy(builder.build());
161 161
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) {

+ 0 - 23
app/src/main/java/com/electric/chargingpile/fragment/YueFragment.java

@ -1,23 +0,0 @@
1
package com.electric.chargingpile.fragment;
2
3
import android.os.Bundle;
4
import androidx.fragment.app.Fragment;
5
import android.view.LayoutInflater;
6
import android.view.View;
7
import android.view.ViewGroup;
8
9
import com.electric.chargingpile.R;
10
11
public class YueFragment extends Fragment {
12
13
14
    @Override
15
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
16
                             Bundle savedInstanceState) {
17
        // Inflate the layout for this fragment
18
        View view = inflater.inflate(R.layout.fragment_yue, null);
19
        return view;
20
    }
21
22
23
}

+ 0 - 304
app/src/main/java/com/electric/chargingpile/fragment/ZoomingPhotoTextFragment.java

@ -1,304 +0,0 @@
1
package com.electric.chargingpile.fragment;
2
3
import android.graphics.Bitmap;
4
import android.os.Bundle;
5
import android.os.Environment;
6
import android.provider.MediaStore;
7
import androidx.fragment.app.Fragment;
8
import androidx.fragment.app.FragmentManager;
9
import androidx.fragment.app.FragmentStatePagerAdapter;
10
import androidx.viewpager.widget.ViewPager.OnPageChangeListener;
11
import android.text.TextUtils;
12
import android.view.LayoutInflater;
13
import android.view.View;
14
import android.view.ViewGroup;
15
import android.widget.LinearLayout;
16
import android.widget.RelativeLayout;
17
import android.widget.ScrollView;
18
import android.widget.TextView;
19
import android.widget.Toast;
20
21
import com.electric.chargingpile.R;
22
import com.electric.chargingpile.application.MainApplication;
23
import com.electric.chargingpile.data.TopicDetailBean;
24
import com.electric.chargingpile.iview.RecyclerItemClickListener;
25
import com.electric.chargingpile.util.JsonUtils;
26
import com.electric.chargingpile.util.ToastUtil;
27
import com.electric.chargingpile.widge.photoview.PhotoView;
28
import com.electric.chargingpile.widge.photoview.PhotoViewAttacher;
29
import com.electric.chargingpile.widge.photoview.ZoomingViewpager;
30
import com.zhy.http.okhttp.OkHttpUtils;
31
import com.zhy.http.okhttp.callback.StringCallback;
32
33
import java.io.File;
34
import java.io.FileNotFoundException;
35
import java.io.FileOutputStream;
36
import java.io.IOException;
37
import java.util.ArrayList;
38
import java.util.HashMap;
39
import java.util.Map;
40
41
import cn.sharesdk.framework.Platform;
42
import cn.sharesdk.framework.PlatformActionListener;
43
import okhttp3.Call;
44
45
public class ZoomingPhotoTextFragment extends Fragment implements PhotoViewAttacher.OnPhotoTapListener, View.OnClickListener, PlatformActionListener {
46
47
    int position = 0, index = 0;
48
    private RelativeLayout app_activity_redmandetail_title_left_layout;
49
    private TextView act_zomming_current_pic_data, act_zomming_current_pic_all;
50
    private ZoomingViewpager photoPager;
51
    LinearLayout act_zomming_dot;
52
    ImageScanAdapter samplePagerAdapter;
53
54
    private RelativeLayout act_photo_content_view, act_zomming_bottom_comment, act_zomming_bottom_layout;
55
    ScrollView act_photo_content_vieww;
56
57
    public ArrayList<String> photoArrayList = new ArrayList<>();
58
59
    private String targetId, targetType;
60
    View view;
61
62
    @Override
63
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
64
65
        view = inflater.inflate(R.layout.activity_zoom_car_photo, null, false);
66
        initView();
67
        return view;
68
    }
69
70
    protected void initView() {
71
72
        act_zomming_current_pic_all = (TextView) view.findViewById(R.id.act_zomming_current_pic_all);
73
        view.findViewById(R.id.app_activity_redmandetail_title_back_layout).setOnClickListener(this);
74
//        act_photo_content = (TextView) findViewById(R.id.act_photo_content);
75
        act_photo_content_view = (RelativeLayout) view.findViewById(R.id.act_photo_content_view);
76
        act_zomming_bottom_comment = (RelativeLayout) view.findViewById(R.id.act_zomming_bottom_comment);
77
        act_zomming_bottom_layout = (RelativeLayout) view.findViewById(R.id.act_zomming_bottom_layout);
78
        act_photo_content_vieww = (ScrollView) view.findViewById(R.id.act_photo_content_vieww);
79
        app_activity_redmandetail_title_left_layout = (RelativeLayout) view.findViewById(R.id
80
                .app_activity_redmandetail_title_left_layout);
81
        act_zomming_current_pic_data = (TextView) view.findViewById(R.id.act_zomming_current_pic_data);
82
83
        targetId = "7";
84
        targetType = "24";
85
        requestServer();
86
    }
87
88
    private void requestServer() {
89
        String url = MainApplication.urlNew + "/topic/detail.do";
90
        Map<String, String> map = new HashMap<>();
91
        map.put("targetId", targetId);
92
        map.put("targetType", targetType);
93
        map.put("limit", "3");
94
        OkHttpUtils.get().params(map).url(url).build().connTimeOut(6000).readTimeOut(6000).execute(new StringCallback() {
95
            @Override
96
            public void onError(Call call, Exception e) {
97
                ToastUtil.showToast(getActivity(), "加载失败,请重试", Toast.LENGTH_SHORT);
98
            }
99
100
            @Override
101
            public void onResponse(String response) {
102
                String rtnCode = JsonUtils.getKeyResult(response, "code");
103
                if ("1000".equals(rtnCode)) {
104
                    String rtnMsg = JsonUtils.getKeyResult(response, "data");
105
                    ArrayList<TopicDetailBean> topicDetailBeans = (ArrayList<TopicDetailBean>) JsonUtils.parseToObjectList(rtnMsg, TopicDetailBean.class);
106
                    setData(topicDetailBeans);
107
                }
108
            }
109
        });
110
    }
111
112
    private void setData(ArrayList<TopicDetailBean> topicDetailBeans) {
113
        position = 0;
114
        for (int i = 0; i < topicDetailBeans.size(); i++) {
115
            photoArrayList.add(topicDetailBeans.get(i).coverImgUrl);
116
        }
117
        act_zomming_current_pic_all.setText("/" + photoArrayList.size());
118
        initLayoutView();
119
        index = position;
120
        draw_Point(position);
121
    }
122
123
    /**
124
     * 绘制游标背景
125
     */
126
    int askFlg;
127
    String subsidyPrice;
128
129
    public void draw_Point(int index) {
130
        act_zomming_current_pic_data.setText((index + 1) + "");
131
    }
132
133
134
    private void initLayoutView() {
135
        act_zomming_dot = (LinearLayout) view.findViewById(R.id.act_zomming_dot);
136
        photoPager = (ZoomingViewpager) view.findViewById(R.id.act_zoomingphoto_photo);
137
        samplePagerAdapter = new ImageScanAdapter(getActivity().getSupportFragmentManager(), photoArrayList);
138
        photoPager.setAdapter(samplePagerAdapter);
139
        photoPager.setCurrentItem(position);
140
141
        photoPager.addOnPageChangeListener(new OnPageChangeListener() {
142
143
            @Override
144
            public void onPageSelected(int arg0) {
145
                index = arg0;
146
                draw_Point(arg0);
147
            }
148
149
            @Override
150
            public void onPageScrolled(int arg0, float arg1, int arg2) {
151
                // TODO Auto-generated method stub
152
153
            }
154
155
            @Override
156
            public void onPageScrollStateChanged(int arg0) {
157
                // TODO Auto-generated method stub
158
159
            }
160
        });
161
    }
162
163
    PhotoViewAttacher mAttacher;
164
    PhotoView photoView;
165
166
    /**
167
     * A callback to receive where the user taps on a photo. You will only
168
     * receive a callback if the user taps on the actual photo, tapping on
169
     * 'whitespace' will be ignored.
170
     *
171
     * @param view - View the user tapped.
172
     * @param x    - where the user tapped from the of the Drawable, as
173
     *             percentage of the Drawable width.
174
     * @param y    - where the user tapped from the top of the Drawable, as
175
     */
176
    @Override
177
    public void onPhotoTap(View view, float x, float y) {
178
        if (app_activity_redmandetail_title_left_layout.getVisibility() == View.VISIBLE) {
179
            app_activity_redmandetail_title_left_layout.setVisibility(View.GONE);
180
            act_photo_content_vieww.setVisibility(View.GONE);
181
            act_photo_content_view.setVisibility(View.GONE);
182
//            pdv.setVisibility(View.GONE);
183
            act_zomming_bottom_comment.setVisibility(View.GONE);
184
185
            act_zomming_bottom_layout.setVisibility(View.VISIBLE);
186
        } else {
187
            app_activity_redmandetail_title_left_layout.setVisibility(View.VISIBLE);
188
            act_photo_content_vieww.setVisibility(View.VISIBLE);
189
            act_photo_content_view.setVisibility(View.VISIBLE);
190
            act_zomming_bottom_comment.setVisibility(View.VISIBLE);
191
            act_zomming_bottom_layout.setVisibility(View.GONE);
192
        }
193
        // finish();
194
    }
195
196
    public void saveBitmap(String picName, Bitmap bm) {
197
        if (bm != null) {
198
            String result = "";
199
            String folder = Environment.getExternalStorageDirectory().getAbsoluteFile() + File.separator + "touch/img/";
200
            File folderFile = new File(folder);
201
            try {
202
                if (!folderFile.exists()) {
203
                    folderFile.mkdirs();
204
                }
205
                File f = new File(folder, picName);
206
                if (!f.exists()) {
207
                    f.createNewFile();
208
                }
209
210
                FileOutputStream out = new FileOutputStream(f);
211
                bm.compress(Bitmap.CompressFormat.PNG, 90, out);
212
                out.flush();
213
                out.close();
214
                result = "success_sd";
215
                // 其次把文件插入到系统图库
216
                MediaStore.Images.Media.insertImage(getActivity().getBaseContext().getContentResolver(),
217
                        f.getAbsolutePath(), picName, null);
218
                result = "success";
219
            } catch (FileNotFoundException e) {
220
                // TODO Auto-generated catch block
221
                e.printStackTrace();
222
                result = "fail";
223
            } catch (IOException e) {
224
                // TODO Auto-generated catch block
225
                e.printStackTrace();
226
                result = "fail";
227
            }
228
//            bm.recycle();
229
//            bm = null;
230
            if ("success".equals(result)) {
231
                Toast.makeText(getActivity(), "已成功保存到相册", Toast.LENGTH_SHORT).show();
232
            } else if ("success_sd".equals(result)) {
233
                Toast.makeText(getActivity(), "已成功保存到内存卡", Toast.LENGTH_SHORT).show();
234
            } else {
235
                Toast.makeText(getActivity(), "保存失败", Toast.LENGTH_SHORT).show();
236
            }
237
        }
238
    }
239
240
    @Override
241
    public void onClick(View v) {
242
        switch (v.getId()) {
243
        }
244
    }
245
246
    @Override
247
    public void onComplete(Platform platform, int i, HashMap<String, Object> hashMap) {
248
        Toast.makeText(getActivity(), platform.getName(), Toast.LENGTH_SHORT).show();
249
    }
250
251
    @Override
252
    public void onError(Platform platform, int i, Throwable throwable) {
253
        Toast.makeText(getActivity(), platform.getName(), Toast.LENGTH_SHORT).show();
254
    }
255
256
    @Override
257
    public void onCancel(Platform platform, int i) {
258
        Toast.makeText(getActivity(), platform.getName(), Toast.LENGTH_SHORT).show();
259
    }
260
261
    class ImageScanAdapter extends FragmentStatePagerAdapter {
262
263
        private ArrayList<String> picData;
264
265
        public ImageScanAdapter(FragmentManager fm, ArrayList<String> picData) {
266
            super(fm);
267
            this.picData = picData;
268
        }
269
270
        @Override
271
        public Fragment getItem(int arg0) {
272
            String picUrl = picData.get(arg0);
273
            Bundle b = new Bundle();
274
            if (!TextUtils.isEmpty(picUrl)) {
275
                b.putString("url", picUrl);
276
            }
277
278
            ImageScanTextFragment f = new ImageScanTextFragment();
279
            f.setArguments(b);
280
            return f;
281
        }
282
283
        @Override
284
        public int getCount() {
285
            return picData.size();
286
        }
287
288
    }
289
290
    private class MainAdapterItemClickListener implements RecyclerItemClickListener {
291
        public void onItemClickListener(int index) {
292
            position = 0;
293
//            for (int i = 0; i < index; i++) {
294
//                for (int j = 0; j < picsVos.get(i).picsBeanList.size(); j++) {
295
//                    position++;
296
//                }
297
//            }
298
            draw_Point(position);
299
            photoPager.setCurrentItem(position);
300
//            }
301
302
        }
303
    }
304
}

+ 152 - 0
app/src/main/java/com/electric/chargingpile/util/DownloadUtil.java

@ -0,0 +1,152 @@
1
package com.electric.chargingpile.util;
2
3
import android.content.Context;
4
5
import android.util.Log;
6
7
import androidx.annotation.NonNull;
8
9
10
import java.io.File;
11
import java.io.FileOutputStream;
12
import java.io.IOException;
13
import java.io.InputStream;
14
import java.util.concurrent.TimeUnit;
15
16
import okhttp3.Call;
17
import okhttp3.Callback;
18
import okhttp3.OkHttpClient;
19
import okhttp3.Request;
20
import okhttp3.Response;
21
22
public class DownloadUtil {
23
 
24
    private static DownloadUtil downloadUtil;
25
    private final OkHttpClient okHttpClient;
26
    private Context context;
27
    private String TAG = "下载页面";
28
 
29
    public static DownloadUtil getInstance() {
30
        if (downloadUtil == null) {
31
            downloadUtil = new DownloadUtil();
32
        }
33
        return downloadUtil;
34
    }
35
 
36
    private DownloadUtil() {
37
        okHttpClient = new OkHttpClient.Builder()
38
                .readTimeout(20, TimeUnit.MINUTES)
39
                .writeTimeout(20, TimeUnit.MINUTES)
40
                .connectTimeout(20, TimeUnit.MINUTES)
41
                .build();
42
    }
43
 
44
    /**
45
     * @param url 下载连接
46
     * @param saveDir 储存下载文件的SDCard目录
47
     * @param listener 下载监听
48
     */
49
    public void download(Context context, final String url, final String saveDir,final String fileName, final OnDownloadListener listener) {
50
        this.context= context;
51
        // 需要token的时候可以这样做
52
        // SharedPreferences sp=MyApp.getAppContext().getSharedPreferences("loginInfo", MODE_PRIVATE);
53
        // Request request = new Request.Builder().header("token",sp.getString("token" , "")).url(url).build();
54
 
55
        Request request = new Request.Builder().url(url)
56
                .build();
57
        
58
        okHttpClient.newCall(request).enqueue(new Callback() {
59
            @Override
60
            public void onFailure(Call call, IOException e) {
61
                // 下载失败
62
                listener.onDownloadFailed(e);
63
            }
64
            @Override
65
            public void onResponse(Call call, Response response) throws IOException {
66
                InputStream is = null;
67
                byte[] buf = new byte[2048];
68
                int len = 0;
69
                FileOutputStream fos = null;
70
                // 储存下载文件的目录
71
                String savePath = isExistDir(saveDir);
72
                Log.w(TAG,"存储下载目录:"+savePath);
73
                try {
74
                    is = response.body().byteStream();
75
                    long total = response.body().contentLength();
76
                    File file = new File(savePath, getNameFromUrl(fileName));
77
                    Log.w(TAG,"最终路径:"+file);
78
                    fos = new FileOutputStream(file);
79
                    long sum = 0;
80
                    while ((len = is.read(buf)) != -1) {
81
                        fos.write(buf, 0, len);
82
                        sum += len;
83
                        int progress = (int) (sum * 1.0f / total * 100);
84
                        // 下载中
85
                        listener.onDownloading(progress);
86
                    }
87
                    fos.flush();
88
                    // 下载完成
89
                    listener.onDownloadSuccess(file);
90
                } catch (Exception e) {
91
                    listener.onDownloadFailed(e);
92
                } finally {
93
                    try {
94
                        if (is != null)
95
                            is.close();
96
                    } catch (IOException e) {
97
                    }
98
                    try {
99
                        if (fos != null)
100
                            fos.close();
101
                    } catch (IOException e) {
102
                    }
103
                }
104
            }
105
        });
106
    }
107
 
108
    /**
109
     * @param saveDir
110
     * @return
111
     * @throws IOException
112
     * 判断下载目录是否存在
113
     */
114
    private String isExistDir(String saveDir) throws IOException {
115
        // 下载位置
116
        File downloadFile = new File(saveDir);
117
        if (!downloadFile.mkdirs()) {
118
            downloadFile.createNewFile();
119
        }
120
        String savePath = downloadFile.getAbsolutePath();
121
        Log.w(TAG,"下载目录:"+savePath);
122
        return savePath;
123
    }
124
 
125
    /**
126
     * @param url
127
     * @return
128
     * 传入文件名
129
     */
130
    @NonNull
131
    public String getNameFromUrl(String url) {
132
        return url;
133
    }
134
 
135
    public interface OnDownloadListener {
136
        /**
137
         * 下载成功
138
         */
139
        void onDownloadSuccess(File file);
140
 
141
        /**
142
         * @param progress
143
         * 下载进度
144
         */
145
        void onDownloading(int progress);
146
 
147
        /**
148
         * 下载失败
149
         */
150
        void onDownloadFailed(Exception e);
151
    }
152
}

+ 0 - 32
app/src/main/java/com/electric/chargingpile/util/ImageTools.java

@ -252,37 +252,5 @@ public final class ImageTools {
252 252
        }
253 253
    }
254 254
255
    public static boolean saveImageToGallery(Context context, Bitmap bmp, String photoName) {
256
        // 首先保存图片
257
        String storePath = Environment.getExternalStorageDirectory().getAbsolutePath() + File.separator + "cdz_android";
258
        File appDir = new File(storePath);
259
        if (!appDir.exists()) {
260
            appDir.mkdir();
261
        }
262
        String fileName = photoName + ".png";
263
        File file = new File(appDir, fileName);
264
        try {
265
            FileOutputStream fos = new FileOutputStream(file);
266
            //通过io流的方式来压缩保存图片
267
            boolean isSuccess = bmp.compress(Bitmap.CompressFormat.PNG, 100, fos);
268
            fos.flush();
269
            fos.close();
270
271
            //把文件插入到系统图库
272
            //MediaStore.Images.Media.insertImage(context.getContentResolver(), file.getAbsolutePath(), fileName, null);
273
274
            //保存图片后发送广播通知更新数据库
275
            Uri uri = Uri.fromFile(file);
276
            context.sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, uri));
277
            if (isSuccess) {
278
                return true;
279
            } else {
280
                return false;
281
            }
282
        } catch (IOException e) {
283
            e.printStackTrace();
284
        }
285
        return false;
286
    }
287 255
288 256
}

+ 82 - 0
app/src/main/java/com/electric/chargingpile/util/PhotoUtils.java

@ -6,7 +6,9 @@ package com.electric.chargingpile.util;
6 6
7 7
import android.annotation.SuppressLint;
8 8
import android.app.Activity;
9
import android.content.ContentResolver;
9 10
import android.content.ContentUris;
11
import android.content.ContentValues;
10 12
import android.content.Context;
11 13
import android.content.Intent;
12 14
import android.database.Cursor;
@ -16,8 +18,20 @@ import android.os.Build;
16 18
import android.os.Environment;
17 19
import android.provider.DocumentsContract;
18 20
import android.provider.MediaStore;
21
import android.widget.Toast;
22
23
import androidx.core.content.FileProvider;
19 24
import androidx.fragment.app.Fragment;
20 25
26
import com.electric.chargingpile.activity.AboutActivity;
27
import com.electric.chargingpile.application.MainApplication;
28
29
import java.io.File;
30
import java.io.FileNotFoundException;
31
import java.io.FileOutputStream;
32
import java.io.IOException;
33
import java.io.OutputStream;
34
21 35
/**
22 36
 * 相片工具类
23 37
 */
@ -283,5 +297,73 @@ public class PhotoUtils {
283 297
        return "com.android.providers.media.documents".equals(uri.getAuthority());
284 298
    }
285 299
300
   public static String CACHE_DIR = MainApplication.context.getExternalCacheDir() + File.separator + "cdz/";
301
   public static String DOWNLOADS = MainApplication.context.getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS) + File.separator + "cdz/";
302
303
304
    public static void saveBitmap(Context context,Bitmap mBitmap,String filePath,String fileName) {
305
        File directory = new File(filePath);
306
        File f = new File(directory, fileName);
307
        try {
308
            if (!directory.exists()) {
309
                directory.mkdir();//没有目录先创建目录
310
            }
311
            f.createNewFile();
312
        } catch (IOException e) {
313
            // TODO Auto-generated catch block
314
        }
315
        FileOutputStream fOut = null;
316
        try {
317
            fOut = new FileOutputStream(f);
318
        } catch (Exception e) {
319
            e.printStackTrace();
320
        }
321
        mBitmap.compress(Bitmap.CompressFormat.JPEG, 100, fOut);
322
        Toast.makeText(context, "保存成功", Toast.LENGTH_SHORT).show();
323
        try {
324
            fOut.flush();
325
        } catch (IOException e) {
326
            e.printStackTrace();
327
        }
328
        try {
329
            fOut.close();
330
        } catch (IOException e) {
331
            e.printStackTrace();
332
        }
333
        ContentResolver contentResolver = MainApplication.context.getContentResolver();
334
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
335
            Uri insert = contentResolver.insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, new ContentValues());
336
            try {
337
                OutputStream outputStream =  contentResolver.openOutputStream(insert);
338
                if (outputStream!=null){
339
                    mBitmap.compress(Bitmap.CompressFormat.JPEG, 100, outputStream);
340
                }
341
            } catch (FileNotFoundException e) {
342
                e.printStackTrace();
343
            }
344
345
        }else{
346
            MediaStore.Images.Media.insertImage(contentResolver, mBitmap, "", "");
347
            Intent intent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
348
            Uri uri = parseUri(new File(CACHE_DIR));
349
            intent.setData(uri);
350
            context.sendBroadcast(intent);
351
        }
352
    }
353
    public static void saveBitmap(Context context,Bitmap mBitmap) {
354
        saveBitmap(context,mBitmap,CACHE_DIR,System.currentTimeMillis()+".jpeg");
355
    }
356
    public static Uri parseUri(File cameraFile) {
357
        Uri imageUri;
358
        String authority = MainApplication.context.getPackageName() + ".provider";
359
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
360
            //通过FileProvider创建一个content类型的Uri
361
            imageUri = FileProvider.getUriForFile(MainApplication.context, authority, cameraFile);
362
        } else {
363
            imageUri = Uri.fromFile(cameraFile);
364
        }
365
        return imageUri;
366
    }
367
286 368
}
287 369

+ 1 - 0
app/src/main/res/xml/provider_paths.xml

@ -2,4 +2,5 @@
2 2
<paths xmlns:android="http://schemas.android.com/apk/res/android">
3 3
    <!--"."表示所有路径-->
4 4
    <external-path name="external_files" path="."/>
5
    <root-path path="" name="rc_root_path"/>
5 6
</paths>