old"> 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>

里程碑 - Gogs: Go Git Service