> 1308
            } catch (Exception e) {
1309
                e.printStackTrace();
1310
            }
1311 1303
1304
        String fileName = "android" + System.currentTimeMillis() / 1000 + ".jpg";
1305
        cameraFilePath = ImageUitl.getPath(PhotoUtils.CACHE_DIR) + "/" + fileName;
1306
        File imageFile = ImageUitl.getFile(cameraFilePath);
1307
        Uri uri = parseUri(imageFile);
1308
        intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);
1309
        try {
1310
            startActivityForResult(intent, FILE_CAMERA_RESULT_CODE);
1311
        } catch (Exception e) {
1312
            e.printStackTrace();
1312 1313
        }
1314
1313 1315
    }
1314 1316
1315 1317
    private Uri parseUri(File cameraFile) {
@ -1327,7 +1329,8 @@ public class H5Activity extends Activity implements View.OnClickListener, Platfo
1327 1329
    @Override
1328 1330
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
1329 1331
        super.onActivityResult(requestCode, resultCode, data);
1330
        if (null == mOpenFileWebChromeClient.mFilePathCallback && null == mOpenFileWebChromeClient.mFilePathCallbacks) return;
1332
        if (null == mOpenFileWebChromeClient.mFilePathCallback && null == mOpenFileWebChromeClient.mFilePathCallbacks)
1333
            return;
1331 1334
        if (resultCode != RESULT_OK) {
1332 1335
            if (mOpenFileWebChromeClient.mFilePathCallbacks != null) {
1333 1336
                mOpenFileWebChromeClient.mFilePathCallbacks.onReceiveValue(null);
@ -1347,7 +1350,7 @@ public class H5Activity extends Activity implements View.OnClickListener, Platfo
1347 1350
                result = data.getData();
1348 1351
            }
1349 1352
            if (result == null && ImageUitl.hasFile(cameraFilePath)) {
1350
                result = Uri.fromFile(new File(cameraFilePath));
1353
                result = PhotoUtils.parseUri(new File(cameraFilePath));
1351 1354
            }
1352 1355
1353 1356
            if (mOpenFileWebChromeClient.mFilePathCallbacks != null) {
@ -1378,13 +1381,13 @@ public class H5Activity extends Activity implements View.OnClickListener, Platfo
1378 1381
            ClipData clipData = intent.getClipData();
1379 1382
            if (clipData != null) {
1380 1383
                results = new Uri[clipData.getItemCount()];
1381
                for (int i=0;i<clipData.getItemCount();i++) {
1384
                for (int i = 0; i < clipData.getItemCount(); i++) {
1382 1385
                    ClipData.Item item = clipData.getItemAt(i);
1383 1386
                    results[i] = item.getUri();
1384 1387
                }
1385 1388
            }
1386 1389
            if (dataString != null) {
1387
                results = new Uri[] {Uri.parse(dataString)};
1390
                results = new Uri[]{Uri.parse(dataString)};
1388 1391
            }
1389 1392
            mOpenFileWebChromeClient.mFilePathCallbacks.onReceiveValue(results);
1390 1393
            mOpenFileWebChromeClient.mFilePathCallbacks = null;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

105 106

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

471 472

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

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

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

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

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

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

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

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

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

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

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

61 60

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

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

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

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

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

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

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

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

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

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

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

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

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

第三方SDK延迟初始化 · 5a729456b2 - Gogs: Go Git Service
Pārlūkot izejas kodu

第三方SDK延迟初始化

hy 3 gadi atpakaļ
vecāks
revīzija
5a729456b2

+ 2 - 1
app/build.gradle

@ -262,5 +262,6 @@ dependencies {
262 262
    implementation 'cn.jiguang.sdk:jpush:4.0.6'
263 263
    implementation 'cn.jiguang.sdk:jcore:2.8.2'
264 264
265
265
//    implementation 'com.github.huage2580:PermissionMonitor:1.0.1'
266
//    implementation "me.weishu:epic:1.0.0"
266 267
}

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

@ -37,7 +37,7 @@ public class PrivacyAgreementActivity extends Activity {
37 37
        setContentView(R.layout.activity_privacy_agreement);
38 38
        BarColorUtil.initStatusBarColor(PrivacyAgreementActivity.this);
39 39
        if (ProfileManager.getInstance().getPrivacyAgreement(this)) {
40
            Application.initMobSDK();
40
            MainApplication.Application.initSDK();
41 41
            Log.e("TAG_HYC", "onCreate:  getPrivacyAgreement" );
42 42
            startActivity(new Intent(PrivacyAgreementActivity.this, WelcomeActivity.class));
43 43
            finish();
@ -105,7 +105,7 @@ public class PrivacyAgreementActivity extends Activity {
105 105
        agreement_btn.setOnClickListener(new View.OnClickListener() {
106 106
            @Override
107 107
            public void onClick(View v) {
108
                Application.initMobSDK();
108
                MainApplication.Application.initSDK();
109 109
                startActivity(new Intent(PrivacyAgreementActivity.this, WelcomeActivity.class));
110 110
                finish();
111 111
            }
@ -134,7 +134,5 @@ public class PrivacyAgreementActivity extends Activity {
134 134
        });
135 135
    }
136 136
137
    private void initMobSDK() {
138
        MobSDK.init(MainApplication.context);
139
    }
137
140 138
}

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

@ -161,17 +161,14 @@ public class MainApplication extends MultiDexApplication {
161 161
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) {
162 162
            builder.detectFileUriExposure();
163 163
        }
164

165
//        MobSDK.init(this);
166

164
//        PermissionMonitor.start(false);
167 165
        instances = this;
168 166
        setDatabase();
169 167

170 168
        Utils.init(this);
171 169
        LogUtils.getConfig().setLogSwitch(true);
172 170

173
        CrashReport.initCrashReport(getApplicationContext(), "900010422", BuildConfig.DEBUG);
174
        CrashReport.setAppChannel(getApplicationContext(), BuildConfig.FLAVOR);
171

175 172
        initImageLoader(getApplicationContext());
176 173

177 174
        try {
@ -391,6 +388,13 @@ public class MainApplication extends MultiDexApplication {
391 388
        this.pushID = pushID;
392 389
        ProfileManager.getInstance().setPushID(getApplicationContext(), pushID);
393 390
    }
391

392
    public static void initSDK() {
393
        MobSDK.init(MainApplication.context);
394
        MobSDK.submitPolicyGrantResult(true,null);
395
        CrashReport.initCrashReport(MainApplication.context, "900010422", BuildConfig.DEBUG);
396
        CrashReport.setAppChannel(MainApplication.context, BuildConfig.FLAVOR);
397
    }
394 398
}
395 399

396 400


+ 2 - 1
gradle.properties

@ -2,4 +2,5 @@ org.gradle.jvmargs=-Xmx8192m -XX:MaxPermSize=1024m -XX:+HeapDumpOnOutOfMemoryErr
2 2
3 3
android.injected.testOnly=false
4 4
android.useAndroidX=true
5
android.enableJetifier=true
5
android.enableJetifier=true
6
MobSDK.spEdition=FP

Merge remote-tracking branch 'origin/change_h5_take_photo' · 09987309b1 - Gogs: Go Git Service
Browse Source

Merge remote-tracking branch 'origin/change_h5_take_photo'

huyuguo 5 years ago
parent
commit
09987309b1

+ 2 - 0
app/build.gradle

@ -226,4 +226,6 @@ dependencies {
226 226
    implementation 'com.shuyu:GSYVideoPlayer:5.0.2'
227 227
    //compile 'com.github.chrisbanes:PhotoView:2.0.0'
228 228
    implementation 'com.wang.avi:library:2.1.3'
229
    implementation 'com.afollestad.material-dialogs:core:0.9.6.0'
230
    implementation 'com.afollestad.material-dialogs:commons:0.9.6.0'
229 231
}

+ 1 - 0
app/gradle.properties

@ -17,4 +17,5 @@
17 17
# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
18 18
# org.gradle.parallel=true
19 19
#android.enableAapt2=false
20
android.injected.testOnly=false
20 21

+ 2 - 2
app/src/main/AndroidManifest.xml

@ -1,8 +1,8 @@
1 1
<?xml version="1.0" encoding="utf-8"?>
2 2
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
3 3
    package="com.electric.chargingpile"
4
    android:versionCode="86"
5
    android:versionName="3.4.8">
4
    android:versionCode="87"
5
    android:versionName="3.4.9">
6 6
    <!-- 极光 -->
7 7
    <application
8 8
        android:name=".application.MainApplication"

BIN
app/src/main/java/com/electric/chargingpile/.DS_Store


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

@ -1,9 +1,11 @@
1 1
package com.electric.chargingpile.activity;
2 2
3
import android.Manifest;
3 4
import android.annotation.SuppressLint;
4 5
import android.annotation.TargetApi;
5 6
import android.app.Activity;
6 7
import android.app.AlertDialog;
8
import android.content.ClipData;
7 9
import android.content.Context;
8 10
import android.content.DialogInterface;
9 11
import android.content.Intent;
@ -12,26 +14,35 @@ import android.net.Uri;
12 14
import android.net.http.SslError;
13 15
import android.os.Build;
14 16
import android.os.Bundle;
17
import android.os.Environment;
18
import android.provider.MediaStore;
19
import android.support.annotation.NonNull;
20
import android.support.v4.content.FileProvider;
15 21
import android.util.Log;
16 22
import android.view.KeyEvent;
17 23
import android.view.View;
24
import android.webkit.GeolocationPermissions;
18 25
import android.webkit.JavascriptInterface;
19 26
import android.webkit.SslErrorHandler;
20 27
import android.webkit.ValueCallback;
21 28
import android.webkit.WebBackForwardList;
29
import android.webkit.WebChromeClient;
30
import android.webkit.WebSettings;
22 31
import android.webkit.WebView;
23 32
import android.webkit.WebViewClient;
24 33
import android.widget.ImageView;
25 34
import android.widget.TextView;
26 35
import android.widget.Toast;
27 36
37
import com.afollestad.materialdialogs.DialogAction;
38
import com.afollestad.materialdialogs.MaterialDialog;
28 39
import com.electric.chargingpile.R;
29 40
import com.electric.chargingpile.application.MainApplication;
30 41
import com.electric.chargingpile.data.User;
31 42
import com.electric.chargingpile.manager.ProfileManager;
32 43
import com.electric.chargingpile.util.DES3;
44
import com.electric.chargingpile.util.ImageUitl;
33 45
import com.electric.chargingpile.util.JsonUtils;
34
import com.electric.chargingpile.util.OpenFileWebChromeClient;
35 46
import com.electric.chargingpile.util.ToastUtil;
36 47
import com.google.gson.Gson;
37 48
import com.umeng.analytics.MobclickAgent;
@ -40,6 +51,7 @@ import com.zhy.http.okhttp.callback.StringCallback;
40 51
41 52
import org.json.JSONObject;
42 53
54
import java.io.File;
43 55
import java.net.URLEncoder;
44 56
import java.util.HashMap;
45 57
import java.util.Map;
@ -48,6 +60,8 @@ import cn.sharesdk.framework.Platform;
48 60
import cn.sharesdk.framework.PlatformActionListener;
49 61
import cn.sharesdk.onekeyshare.OnekeyShare;
50 62
import okhttp3.Call;
63
import pub.devrel.easypermissions.AfterPermissionGranted;
64
import pub.devrel.easypermissions.EasyPermissions;
51 65
52 66
public class AdinShowActivity extends Activity implements View.OnClickListener {
53 67
    private WebView webView;
@ -63,6 +77,11 @@ public class AdinShowActivity extends Activity implements View.OnClickListener {
63 77
    private static String nocar = "";
64 78
    private String canRefresh = "false";
65 79
80
    private static final int RC_ALBUM_PERM = 127;
81
    private final static int FILE_CHOOSER_RESULT_CODE = 128;  // 图片
82
    private final static int FILE_CAMERA_RESULT_CODE = 129; // 拍照
83
    private String cameraFilePath;  // 拍照图片路径
84
66 85
67 86
    String shareUrl, shareTitle, shareIcon, shareContent;
68 87
    public OpenFileWebChromeClient mOpenFileWebChromeClient = null;
@ -144,18 +163,17 @@ public class AdinShowActivity extends Activity implements View.OnClickListener {
144 163
        webView.getSettings().setBuiltInZoomControls(true);
145 164
        webView.getSettings().setJavaScriptEnabled(true);
146 165
        webView.getSettings().setDatabaseEnabled(true);
166
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
167
            webView.getSettings().setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW);
168
        }
147 169
        String dir = this.getApplicationContext().getDir("database", Context.MODE_PRIVATE).getPath();
148 170
149 171
        //启用地理定位
150 172
        webView.getSettings().setGeolocationEnabled(true);
151 173
        //设置定位的数据库路径
152 174
        webView.getSettings().setGeolocationDatabasePath(dir);
153
//        webView.getSettings().setGeolocationEnabled(true);
154 175
        webView.setWebChromeClient(mOpenFileWebChromeClient);
155 176
        webView.addJavascriptInterface(this, "cdz");
156
157
//        webView.setWebChromeClient(((H5Activity) mContext).mOpenFileWebChromeClient);
158
159 177
        webView.getSettings().setDomStorageEnabled(true);
160 178
161 179
        webView.setWebViewClient(new WebViewClient() {
@ -839,5 +857,220 @@ public class AdinShowActivity extends Activity implements View.OnClickListener {
839 857
        super.onPause();
840 858
        MobclickAgent.onPause(this);
841 859
    }
860
861
    public class OpenFileWebChromeClient extends WebChromeClient {
862
        public static final int REQUEST_FILE_PICKER = 1;
863
        public ValueCallback<Uri> mFilePathCallback;
864
        public ValueCallback<Uri[]> mFilePathCallbacks;
865
        Activity mContext;
866
867
        public OpenFileWebChromeClient(Activity mContext) {
868
            super();
869
            this.mContext = mContext;
870
        }
871
872
        @Override
873
        public void onReceivedTitle(WebView view, String title) {
874
            super.onReceivedTitle(view, title);
875
            Log.d("ANDROID_LAB", "TITLE=" + title);
876
            txtTitle.setText(title);
877
        }
878
879
        @Override
880
        public void onProgressChanged(WebView view, int newProgress) {
881
            super.onProgressChanged(view, newProgress);
882
//            pb_webBar.setProgress(newProgress);
883
        }
884
885
        @Override
886
        public void onGeolocationPermissionsShowPrompt(String origin,
887
                                                       GeolocationPermissions.Callback callback) {
888
            callback.invoke(origin, true, false);
889
            // TODO Auto-generated method stub
890
            super.onGeolocationPermissionsShowPrompt(origin, callback);
891
        }
892
893
        // Android < 3.0 调用这个方法
894
        public void openFileChooser(ValueCallback<Uri> filePathCallback) {
895
            mFilePathCallback = filePathCallback;
896
            permissionTask();
897
        }
898
899
        // 3.0 + 调用这个方法
900
        public void openFileChooser(ValueCallback filePathCallback, String acceptType) {
901
            mFilePathCallback = filePathCallback;
902
            permissionTask();
903
        }
904
905
        // / js上传文件的<input type="file" name="fileField" id="fileField" />事件捕获
906
        // Android > 4.1.1 调用这个方法
907
        public void openFileChooser(ValueCallback<Uri> filePathCallback, String acceptType, String capture) {
908
            mFilePathCallback = filePathCallback;
909
            permissionTask();
910
        }
911
912
        @Override
913
        public boolean onShowFileChooser(WebView webView, ValueCallback<Uri[]> filePathCallback, FileChooserParams fileChooserParams) {
914
            mFilePathCallbacks = filePathCallback;
915
            permissionTask();
916
            return true;
917
        }
918
    }
919
920
    @AfterPermissionGranted(RC_ALBUM_PERM)
921
    public void permissionTask() {
922
        if (isPermissionOK()) {
923
            openImageChooserActivity();
924
        } else {
925
            EasyPermissions.requestPermissions(
926
                    this, "充电桩想要获取您的图片读取权限,是否允许?",
927
                    RC_ALBUM_PERM,
928
                    Manifest.permission.CAMERA,
929
                    Manifest.permission.WRITE_EXTERNAL_STORAGE,
930
                    Manifest.permission.READ_EXTERNAL_STORAGE);
931
        }
932
    }
933
934
    private boolean isPermissionOK() {
935
        return EasyPermissions.hasPermissions(this,
936
                Manifest.permission.WRITE_EXTERNAL_STORAGE,
937
                Manifest.permission.READ_EXTERNAL_STORAGE,
938
                Manifest.permission.CAMERA
939
        );
940
    }
941
942
    private void openImageChooserActivity() {
943
        new MaterialDialog.Builder(this).items(R.array.photo).positiveText("取消")
944
                .onPositive(new MaterialDialog.SingleButtonCallback() {
945
                    @Override
946
                    public void onClick(@NonNull MaterialDialog dialog, @NonNull DialogAction which) {
947
                        if (mOpenFileWebChromeClient.mFilePathCallbacks != null) {
948
                            mOpenFileWebChromeClient.mFilePathCallbacks.onReceiveValue(null);
949
                            mOpenFileWebChromeClient.mFilePathCallbacks = null;
950
                        }
951
952
                        if (mOpenFileWebChromeClient.mFilePathCallback != null) {
953
                            mOpenFileWebChromeClient.mFilePathCallback.onReceiveValue(null);
954
                            mOpenFileWebChromeClient.mFilePathCallback = null;
955
                        }
956
                        dialog.dismiss();
957
                    }
958
                }).cancelable(false)
959
                .canceledOnTouchOutside(false).itemsCallback(new MaterialDialog.ListCallback() {
960
            @Override
961
            public void onSelection(MaterialDialog dialog, View itemView, int position, CharSequence text) {
962
                if (position == 0){
963
                    takeCamera();
964
                } else if (position == 1) {
965
                    takePhoto();
966
                }
967
            }
968
        }).show();
969
    }
970
971
    // 选择图片
972
    private void takePhoto() {
973
        Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
974
        intent.addCategory(Intent.CATEGORY_OPENABLE);
975
        intent.setType("image/*");
976
        startActivityForResult(Intent.createChooser(intent, "Image Choose"), FILE_CHOOSER_RESULT_CODE);
977
    }
978
979
    // 拍照
980
    private void takeCamera() {
981
        Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
982
        if (ImageUitl.hasSdcard()) {
983
            String fileName = "android" + System.currentTimeMillis() / 1000 + ".jpg";
984
            cameraFilePath = ImageUitl.getPath(Environment.getExternalStorageDirectory() + "/" + "cdz") + "/" + fileName;
985
            File imageFile = ImageUitl.getFile(cameraFilePath);
986
            Uri uri = parseUri(imageFile);
987
            intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);
988
            try{
989
                startActivityForResult(intent, FILE_CAMERA_RESULT_CODE);
990
            } catch (Exception e) {
991
                e.printStackTrace();
992
            }
993
994
        }
995
    }
996
997
    private Uri parseUri(File cameraFile) {
998
        Uri imageUri;
999
        String authority = getPackageName() + ".provider";
1000
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
1001
            //通过FileProvider创建一个content类型的Uri
1002
            imageUri = FileProvider.getUriForFile(getApplicationContext(), authority, cameraFile);
1003
        } else {
1004
            imageUri = Uri.fromFile(cameraFile);
1005
        }
1006
        return imageUri;
1007
    }
1008
1009
    @Override
1010
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
1011
        super.onActivityResult(requestCode, resultCode, data);
1012
        if (null == mOpenFileWebChromeClient.mFilePathCallback && null == mOpenFileWebChromeClient.mFilePathCallbacks) return;
1013
        if (resultCode != RESULT_OK) {
1014
            if (mOpenFileWebChromeClient.mFilePathCallbacks != null) {
1015
                mOpenFileWebChromeClient.mFilePathCallbacks.onReceiveValue(null);
1016
                mOpenFileWebChromeClient.mFilePathCallbacks = null;
1017
            }
1018
1019
            if (mOpenFileWebChromeClient.mFilePathCallback != null) {
1020
                mOpenFileWebChromeClient.mFilePathCallback.onReceiveValue(null);
1021
                mOpenFileWebChromeClient.mFilePathCallback = null;
1022
            }
1023
            return;
1024
        }
1025
1026
        Uri result = null;
1027
        if (requestCode == FILE_CAMERA_RESULT_CODE) {
1028
            if (null != data && null != data.getData()) {
1029
                result = data.getData();
1030
            }
1031
            if (result == null && ImageUitl.hasFile(cameraFilePath)) {
1032
                result = Uri.fromFile(new File(cameraFilePath));
1033
            }
1034
1035
            if (mOpenFileWebChromeClient.mFilePathCallbacks != null) {
1036
                mOpenFileWebChromeClient.mFilePathCallbacks.onReceiveValue(new Uri[]{result});
1037
                mOpenFileWebChromeClient.mFilePathCallbacks = null;
1038
            } else if (mOpenFileWebChromeClient.mFilePathCallback != null) {
1039
                mOpenFileWebChromeClient.mFilePathCallback.onReceiveValue(result);
1040
                mOpenFileWebChromeClient.mFilePathCallback = null;
1041
            }
1042
        } else if (requestCode == FILE_CHOOSER_RESULT_CODE) {
1043
            if (data != null) {
1044
                result = data.getData();
1045
            }
1046
            if (mOpenFileWebChromeClient.mFilePathCallbacks != null) {
1047
                onActivityResultCallbacks(data);
1048
            } else if (mOpenFileWebChromeClient.mFilePathCallback != null) {
1049
                mOpenFileWebChromeClient.mFilePathCallback.onReceiveValue(result);
1050
                mOpenFileWebChromeClient.mFilePathCallback = null;
1051
            }
1052
        }
1053
    }
1054
1055
    @TargetApi(Build.VERSION_CODES.LOLLIPOP)
1056
    private void onActivityResultCallbacks(Intent intent) {
1057
        Uri[] results = null;
1058
        if (intent != null) {
1059
            String dataString = intent.getDataString();
1060
            ClipData clipData = intent.getClipData();
1061
            if (clipData != null) {
1062
                results = new Uri[clipData.getItemCount()];
1063
                for (int i=0;i<clipData.getItemCount();i++) {
1064
                    ClipData.Item item = clipData.getItemAt(i);
1065
                    results[i] = item.getUri();
1066
                }
1067
            }
1068
            if (dataString != null) {
1069
                results = new Uri[] {Uri.parse(dataString)};
1070
            }
1071
            mOpenFileWebChromeClient.mFilePathCallbacks.onReceiveValue(results);
1072
            mOpenFileWebChromeClient.mFilePathCallbacks = null;
1073
        }
1074
    }
842 1075
}
843 1076

+ 194 - 93
app/src/main/java/com/electric/chargingpile/activity/H5Activity.java

@ -1,10 +1,12 @@
1 1
package com.electric.chargingpile.activity;
2 2
3
import android.Manifest;
3 4
import android.annotation.SuppressLint;
4 5
import android.annotation.TargetApi;
5 6
import android.app.Activity;
6 7
import android.app.AlertDialog;
7 8
import android.content.ActivityNotFoundException;
9
import android.content.ClipData;
8 10
import android.content.Context;
9 11
import android.content.DialogInterface;
10 12
import android.content.Intent;
@ -14,6 +16,10 @@ import android.net.Uri;
14 16
import android.net.http.SslError;
15 17
import android.os.Build;
16 18
import android.os.Bundle;
19
import android.os.Environment;
20
import android.provider.MediaStore;
21
import android.support.annotation.NonNull;
22
import android.support.v4.content.FileProvider;
17 23
import android.util.Log;
18 24
import android.view.KeyEvent;
19 25
import android.view.View;
@ -23,6 +29,7 @@ import android.webkit.SslErrorHandler;
23 29
import android.webkit.ValueCallback;
24 30
import android.webkit.WebBackForwardList;
25 31
import android.webkit.WebChromeClient;
32
import android.webkit.WebSettings;
26 33
import android.webkit.WebView;
27 34
import android.webkit.WebViewClient;
28 35
import android.widget.ImageView;
@ -30,11 +37,14 @@ import android.widget.ProgressBar;
30 37
import android.widget.TextView;
31 38
import android.widget.Toast;
32 39
40
import com.afollestad.materialdialogs.DialogAction;
41
import com.afollestad.materialdialogs.MaterialDialog;
33 42
import com.electric.chargingpile.R;
34 43
import com.electric.chargingpile.application.MainApplication;
35 44
import com.electric.chargingpile.data.User;
36 45
import com.electric.chargingpile.manager.ProfileManager;
37 46
import com.electric.chargingpile.util.DES3;
47
import com.electric.chargingpile.util.ImageUitl;
38 48
import com.electric.chargingpile.util.JsonUtils;
39 49
import com.electric.chargingpile.util.MediaUtility;
40 50
import com.electric.chargingpile.util.ToastUtil;
@ -48,6 +58,7 @@ import org.json.JSONObject;
48 58
import java.io.File;
49 59
import java.net.URLEncoder;
50 60
import java.util.HashMap;
61
import java.util.List;
51 62
import java.util.Map;
52 63
53 64
import cn.sharesdk.framework.Platform;
@ -57,8 +68,10 @@ import cn.sharesdk.onekeyshare.OnekeyShare;
57 68
import cn.sharesdk.wechat.friends.Wechat;
58 69
import cn.sharesdk.wechat.moments.WechatMoments;
59 70
import okhttp3.Call;
71
import pub.devrel.easypermissions.AfterPermissionGranted;
72
import pub.devrel.easypermissions.EasyPermissions;
60 73
61
public class H5Activity extends Activity implements View.OnClickListener, PlatformActionListener {
74
public class H5Activity extends Activity implements View.OnClickListener, PlatformActionListener,EasyPermissions.PermissionCallbacks {
62 75
    private WebView webView;
63 76
    private ImageView iv_back, iv_close;
64 77
    private TextView txtTitle, tv_next;
@ -80,6 +93,11 @@ public class H5Activity extends Activity implements View.OnClickListener, Platfo
80 93
    private String mUrl;
81 94
    private ProgressBar pbWebView;
82 95
96
    private static final int RC_ALBUM_PERM = 127;
97
    private final static int FILE_CHOOSER_RESULT_CODE = 128;  // 图片
98
    private final static int FILE_CAMERA_RESULT_CODE = 129; // 拍照
99
    private String cameraFilePath;  // 拍照图片路径
100
83 101
84 102
    @SuppressLint("SetJavaScriptEnabled")
85 103
    @Override
@ -171,6 +189,9 @@ public class H5Activity extends Activity implements View.OnClickListener, Platfo
171 189
        webView.getSettings().setSupportZoom(true);
172 190
        webView.getSettings().setBuiltInZoomControls(true);
173 191
        webView.getSettings().setJavaScriptEnabled(true);
192
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
193
            webView.getSettings().setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW);
194
        }
174 195
        if (tag.equals("6")) {
175 196
            Map<String, String> extraHeaders = new HashMap<String, String>();
176 197
            extraHeaders.put("Authorization", "Bearer " + token);
@ -180,40 +201,6 @@ public class H5Activity extends Activity implements View.OnClickListener, Platfo
180 201
            webView.loadUrl(urlweb);
181 202
        }
182 203
183
//        TelephonyManager tm = (TelephonyManager) this.getSystemService(TELEPHONY_SERVICE);
184
//        String imei = tm.getDeviceId();
185
//        String url = "http://123.57.6.131/zhannew/basic/web/index.php/test/index?deviceCode="+imei;
186
//        Log.e("tld_url===",url);
187
//
188
//        OkHttpUtils.get()
189
//                .url(url)
190
//                .build()
191
//                .execute(new StringCallback() {
192
//                    @Override
193
//                    public void onError(Call call, Exception e) {
194
//
195
//                    }
196
//
197
//                    @Override
198
//                    public void onResponse(String response) {
199
//                        String url = JsonUtils.getKeyResult(response,"url");
200
//                        Log.e("url===",url);
201
//                        String token = JsonUtils.getKeyResult(response,"token");
202
//                        Log.e("token===",token);
203
//                        Map<String,String> extraHeaders = new HashMap<String, String>();
204
//                        extraHeaders.put("Authorization", "Bearer "+token);
205
//                        extraHeaders.put("Content-Type", "application/html; charset=utf-8");
206
//                        webView.loadUrl(url,extraHeaders);
207
//                    }
208
//                });
209
//
210
211
//        String s = "http://open.wyqcd.com/TerminalDetails/TerminalDetails?deviceCode=869161024656860&mobile=18911900442&pileCode=12313132&thirdCode=20160804110219&sign=6248586650bf637ea5201213b5dc3ff0";
212
//        Map<String,String> extraHeaders = new HashMap<String, String>();
213
//        extraHeaders.put("Authorization", "Bearer iT4Kg5q_kAf4xRMLxwARa-sEfPpCNfD1McKDhdj7hIZlUzHxnpoEAxqqa9nKpJ0XjOF3PqLqP36eTDqX-xi9DYJ9a02cQYjWyCv7kds6QVcs_qvvDQ4fAMWkqD4O7Ibggxzorg4VB4GzmMAaNe4GKhn8zu3WFt49cNzhc7yn4b0G7fNHF_o2PIoD6UEEvysBwv0p10vezSkO7dvDK_3IxcLW9qevV0sF8ZVDqdeTZ5yd5fZS");
214
//        extraHeaders.put("Content-Type", "application/html; charset=utf-8");
215
//        webView.loadUrl(s,extraHeaders);
216
//        webView.loadUrl("http://cdz.evcharge.cc/zhannew/basic/web/index.php/userpile/index?user_id=42224&token=ssss");
217 204
        webView.getSettings().setDatabaseEnabled(true);
218 205
        String dir = this.getApplicationContext().getDir("database", Context.MODE_PRIVATE).getPath();
219 206
@ -221,11 +208,8 @@ public class H5Activity extends Activity implements View.OnClickListener, Platfo
221 208
        webView.getSettings().setGeolocationEnabled(true);
222 209
        //设置定位的数据库路径
223 210
        webView.getSettings().setGeolocationDatabasePath(dir);
224
//        webView.getSettings().setGeolocationEnabled(true);
225 211
        webView.setWebChromeClient(mOpenFileWebChromeClient);
226 212
227
//        webView.setWebChromeClient(((H5Activity) mContext).mOpenFileWebChromeClient);
228
229 213
        webView.getSettings().setDomStorageEnabled(true);
230 214
        webView.addJavascriptInterface(this, "cdz");
231 215
@ -1168,10 +1152,28 @@ public class H5Activity extends Activity implements View.OnClickListener, Platfo
1168 1152
    public void onCancel(Platform platform, int i) {
1169 1153
        Toast.makeText(getApplicationContext(), "分享已取消", Toast.LENGTH_SHORT).show();
1170 1154
    }
1155
    @Override
1156
    public void onRequestPermissionsResult(int requestCode,
1157
                                           @NonNull String[] permissions,
1158
                                           @NonNull int[] grantResults) {
1159
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
1171 1160
1161
        // EasyPermissions handles the request result.
1162
        EasyPermissions.onRequestPermissionsResult(requestCode, permissions, grantResults, this);
1163
    }
1164
1165
    @Override
1166
    public void onPermissionsGranted(int requestCode, List<String> perms) {
1167
1168
    }
1172 1169
1173
//    public OpenFileWebChromeClient mOpenFileWebChromeClient = new OpenFileWebChromeClient(
1174
//            this);
1170
    @Override
1171
    public void onPermissionsDenied(int requestCode, List<String> perms) {
1172
        if (requestCode == RC_ALBUM_PERM) {
1173
            mOpenFileWebChromeClient.mFilePathCallback = null;
1174
            mOpenFileWebChromeClient.mFilePathCallbacks = null;
1175
        }
1176
    }
1175 1177
1176 1178
    public class OpenFileWebChromeClient extends WebChromeClient {
1177 1179
        public static final int REQUEST_FILE_PICKER = 1;
@ -1208,24 +1210,14 @@ public class H5Activity extends Activity implements View.OnClickListener, Platfo
1208 1210
        // Android < 3.0 调用这个方法
1209 1211
        public void openFileChooser(ValueCallback<Uri> filePathCallback) {
1210 1212
            mFilePathCallback = filePathCallback;
1211
            Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
1212
            intent.addCategory(Intent.CATEGORY_OPENABLE);
1213
            intent.setType("*/*");
1214
            mContext.startActivityForResult(
1215
                    Intent.createChooser(intent, "File Chooser"),
1216
                    REQUEST_FILE_PICKER);
1213
            permissionTask();
1217 1214
        }
1218 1215
1219 1216
        // 3.0 + 调用这个方法
1220 1217
        public void openFileChooser(ValueCallback filePathCallback,
1221 1218
                                    String acceptType) {
1222 1219
            mFilePathCallback = filePathCallback;
1223
            Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
1224
            intent.addCategory(Intent.CATEGORY_OPENABLE);
1225
            intent.setType("*/*");
1226
            mContext.startActivityForResult(
1227
                    Intent.createChooser(intent, "File Chooser"),
1228
                    REQUEST_FILE_PICKER);
1220
            permissionTask();
1229 1221
        }
1230 1222
1231 1223
        // / js上传文件的<input type="file" name="fileField" id="fileField" />事件捕获
@ -1233,60 +1225,169 @@ public class H5Activity extends Activity implements View.OnClickListener, Platfo
1233 1225
        public void openFileChooser(ValueCallback<Uri> filePathCallback,
1234 1226
                                    String acceptType, String capture) {
1235 1227
            mFilePathCallback = filePathCallback;
1236
            Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
1237
            intent.addCategory(Intent.CATEGORY_OPENABLE);
1238
            intent.setType("*/*");
1239
            mContext.startActivityForResult(
1240
                    Intent.createChooser(intent, "File Chooser"),
1241
                    REQUEST_FILE_PICKER);
1228
            permissionTask();
1242 1229
        }
1243 1230
1244
        public boolean onShowFileChooser(WebView webView,
1245
                                         ValueCallback<Uri[]> filePathCallback) {
1231
        @Override
1232
        public boolean onShowFileChooser(WebView webView, ValueCallback<Uri[]> filePathCallback, FileChooserParams fileChooserParams) {
1246 1233
            mFilePathCallbacks = filePathCallback;
1247
            Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
1248
            intent.addCategory(Intent.CATEGORY_OPENABLE);
1249
            intent.setType("*/*");
1250
            mContext.startActivityForResult(
1251
                    Intent.createChooser(intent, "File Chooser"),
1252
                    REQUEST_FILE_PICKER);
1234
            permissionTask();
1253 1235
            return true;
1254 1236
        }
1255 1237
    }
1256 1238
1239
    @AfterPermissionGranted(RC_ALBUM_PERM)
1240
    public void permissionTask() {
1241
        if (isPermissionOK()) {
1242
            openImageChooserActivity();
1243
        } else {
1244
            EasyPermissions.requestPermissions(
1245
                    this, "充电桩想要获取您的图片读取权限,是否允许?",
1246
                    RC_ALBUM_PERM,
1247
                    Manifest.permission.CAMERA,
1248
                    Manifest.permission.WRITE_EXTERNAL_STORAGE,
1249
                    Manifest.permission.READ_EXTERNAL_STORAGE);
1250
        }
1251
    }
1252
1253
    private boolean isPermissionOK() {
1254
        return EasyPermissions.hasPermissions(this,
1255
                Manifest.permission.WRITE_EXTERNAL_STORAGE,
1256
                Manifest.permission.READ_EXTERNAL_STORAGE,
1257
                Manifest.permission.CAMERA
1258
        );
1259
    }
1260
1261
    private void openImageChooserActivity() {
1262
        new MaterialDialog.Builder(this).items(R.array.photo).positiveText("取消")
1263
                .onPositive(new MaterialDialog.SingleButtonCallback() {
1264
                    @Override
1265
                    public void onClick(@NonNull MaterialDialog dialog, @NonNull DialogAction which) {
1266
                        if (mOpenFileWebChromeClient.mFilePathCallbacks != null) {
1267
                            mOpenFileWebChromeClient.mFilePathCallbacks.onReceiveValue(null);
1268
                            mOpenFileWebChromeClient.mFilePathCallbacks = null;
1269
                        }
1270
1271
                        if (mOpenFileWebChromeClient.mFilePathCallback != null) {
1272
                            mOpenFileWebChromeClient.mFilePathCallback.onReceiveValue(null);
1273
                            mOpenFileWebChromeClient.mFilePathCallback = null;
1274
                        }
1275
                        dialog.dismiss();
1276
                    }
1277
                }).cancelable(false)
1278
                .canceledOnTouchOutside(false).itemsCallback(new MaterialDialog.ListCallback() {
1279
            @Override
1280
            public void onSelection(MaterialDialog dialog, View itemView, int position, CharSequence text) {
1281
                if (position == 0){
1282
                    takeCamera();
1283
                } else if (position == 1) {
1284
                    takePhoto();
1285
                }
1286
            }
1287
        }).show();
1288
    }
1289
1290
    // 选择图片
1291
    private void takePhoto() {
1292
        Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
1293
        intent.addCategory(Intent.CATEGORY_OPENABLE);
1294
        intent.setType("image/*");
1295
        startActivityForResult(Intent.createChooser(intent, "Image Choose"), FILE_CHOOSER_RESULT_CODE);
1296
    }
1297
1298
    // 拍照
1299
    private void takeCamera() {
1300
        Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
1301
        if (ImageUitl.hasSdcard()) {
1302
            String fileName = "android" + System.currentTimeMillis() / 1000 + ".jpg";
1303
            cameraFilePath = ImageUitl.getPath(Environment.getExternalStorageDirectory() + "/" + "cdz") + "/" + fileName;
1304
            File imageFile = ImageUitl.getFile(cameraFilePath);
1305
            Uri uri = parseUri(imageFile);
1306
            intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);
1307
            try{
1308
                startActivityForResult(intent, FILE_CAMERA_RESULT_CODE);
1309
            } catch (Exception e) {
1310
                e.printStackTrace();
1311
            }
1312
1313
        }
1314
    }
1315
1316
    private Uri parseUri(File cameraFile) {
1317
        Uri imageUri;
1318
        String authority = getPackageName() + ".provider";
1319
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
1320
            //通过FileProvider创建一个content类型的Uri
1321
            imageUri = FileProvider.getUriForFile(getApplicationContext(), authority, cameraFile);
1322
        } else {
1323
            imageUri = Uri.fromFile(cameraFile);
1324
        }
1325
        return imageUri;
1326
    }
1327
1257 1328
    @Override
1258
    public void onActivityResult(int requestCode, int resultCode, Intent intent) {
1259
        if (requestCode == OpenFileWebChromeClient.REQUEST_FILE_PICKER) {
1329
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
1330
        super.onActivityResult(requestCode, resultCode, data);
1331
        if (null == mOpenFileWebChromeClient.mFilePathCallback && null == mOpenFileWebChromeClient.mFilePathCallbacks) return;
1332
        if (resultCode != RESULT_OK) {
1333
            if (mOpenFileWebChromeClient.mFilePathCallbacks != null) {
1334
                mOpenFileWebChromeClient.mFilePathCallbacks.onReceiveValue(null);
1335
                mOpenFileWebChromeClient.mFilePathCallbacks = null;
1336
            }
1337
1260 1338
            if (mOpenFileWebChromeClient.mFilePathCallback != null) {
1261
                Uri result = intent == null || resultCode != Activity.RESULT_OK ? null
1262
                        : intent.getData();
1263
                if (result != null) {
1264
                    String path = MediaUtility.getPath(getApplicationContext(),
1265
                            result);
1266
                    Uri uri = Uri.fromFile(new File(path));
1267
                    mOpenFileWebChromeClient.mFilePathCallback
1268
                            .onReceiveValue(uri);
1269
                } else {
1270
                    mOpenFileWebChromeClient.mFilePathCallback
1271
                            .onReceiveValue(null);
1272
                }
1339
                mOpenFileWebChromeClient.mFilePathCallback.onReceiveValue(null);
1340
                mOpenFileWebChromeClient.mFilePathCallback = null;
1341
            }
1342
            return;
1343
        }
1344
1345
        Uri result = null;
1346
        if (requestCode == FILE_CAMERA_RESULT_CODE) {
1347
            if (null != data && null != data.getData()) {
1348
                result = data.getData();
1273 1349
            }
1350
            if (result == null && ImageUitl.hasFile(cameraFilePath)) {
1351
                result = Uri.fromFile(new File(cameraFilePath));
1352
            }
1353
1274 1354
            if (mOpenFileWebChromeClient.mFilePathCallbacks != null) {
1275
                Uri result = intent == null || resultCode != Activity.RESULT_OK ? null
1276
                        : intent.getData();
1277
                if (result != null) {
1278
                    String path = MediaUtility.getPath(getApplicationContext(),
1279
                            result);
1280
                    Uri uri = Uri.fromFile(new File(path));
1281
                    mOpenFileWebChromeClient.mFilePathCallbacks
1282
                            .onReceiveValue(new Uri[]{uri});
1283
                } else {
1284
                    mOpenFileWebChromeClient.mFilePathCallbacks
1285
                            .onReceiveValue(null);
1286
                }
1355
                mOpenFileWebChromeClient.mFilePathCallbacks.onReceiveValue(new Uri[]{result});
1356
                mOpenFileWebChromeClient.mFilePathCallbacks = null;
1357
            } else if (mOpenFileWebChromeClient.mFilePathCallback != null) {
1358
                mOpenFileWebChromeClient.mFilePathCallback.onReceiveValue(result);
1359
                mOpenFileWebChromeClient.mFilePathCallback = null;
1287 1360
            }
1361
        } else if (requestCode == FILE_CHOOSER_RESULT_CODE) {
1362
            if (data != null) {
1363
                result = data.getData();
1364
            }
1365
            if (mOpenFileWebChromeClient.mFilePathCallbacks != null) {
1366
                onActivityResultCallbacks(data);
1367
            } else if (mOpenFileWebChromeClient.mFilePathCallback != null) {
1368
                mOpenFileWebChromeClient.mFilePathCallback.onReceiveValue(result);
1369
                mOpenFileWebChromeClient.mFilePathCallback = null;
1370
            }
1371
        }
1372
    }
1288 1373
1289
            mOpenFileWebChromeClient.mFilePathCallback = null;
1374
    @TargetApi(Build.VERSION_CODES.LOLLIPOP)
1375
    private void onActivityResultCallbacks(Intent intent) {
1376
        Uri[] results = null;
1377
        if (intent != null) {
1378
            String dataString = intent.getDataString();
1379
            ClipData clipData = intent.getClipData();
1380
            if (clipData != null) {
1381
                results = new Uri[clipData.getItemCount()];
1382
                for (int i=0;i<clipData.getItemCount();i++) {
1383
                    ClipData.Item item = clipData.getItemAt(i);
1384
                    results[i] = item.getUri();
1385
                }
1386
            }
1387
            if (dataString != null) {
1388
                results = new Uri[] {Uri.parse(dataString)};
1389
            }
1390
            mOpenFileWebChromeClient.mFilePathCallbacks.onReceiveValue(results);
1290 1391
            mOpenFileWebChromeClient.mFilePathCallbacks = null;
1291 1392
        }
1292 1393
    }

+ 261 - 54
app/src/main/java/com/electric/chargingpile/activity/HomeWebActivity.java

@ -1,36 +1,51 @@
1 1
package com.electric.chargingpile.activity;
2 2
3
import android.Manifest;
3 4
import android.annotation.SuppressLint;
5
import android.annotation.TargetApi;
4 6
import android.app.Activity;
5 7
import android.app.AlertDialog;
8
import android.content.ClipData;
6 9
import android.content.Context;
7 10
import android.content.DialogInterface;
8 11
import android.content.Intent;
9 12
import android.net.Uri;
10 13
import android.net.http.SslError;
14
import android.os.Build;
11 15
import android.os.Bundle;
16
import android.os.Environment;
17
import android.provider.MediaStore;
18
import android.support.annotation.NonNull;
19
import android.support.v4.content.FileProvider;
12 20
import android.util.Log;
13 21
import android.view.KeyEvent;
14 22
import android.view.View;
23
import android.webkit.GeolocationPermissions;
15 24
import android.webkit.JavascriptInterface;
16 25
import android.webkit.SslErrorHandler;
26
import android.webkit.ValueCallback;
17 27
import android.webkit.WebBackForwardList;
18 28
import android.webkit.WebChromeClient;
29
import android.webkit.WebSettings;
19 30
import android.webkit.WebView;
20 31
import android.webkit.WebViewClient;
21 32
import android.widget.ImageView;
22 33
import android.widget.TextView;
23 34
import android.widget.Toast;
24 35
36
import com.afollestad.materialdialogs.DialogAction;
37
import com.afollestad.materialdialogs.MaterialDialog;
25 38
import com.electric.chargingpile.R;
26 39
import com.electric.chargingpile.application.MainApplication;
27 40
import com.electric.chargingpile.util.DES3;
41
import com.electric.chargingpile.util.ImageUitl;
28 42
import com.electric.chargingpile.util.JsonUtils;
29
import com.electric.chargingpile.util.OpenFileWebChromeClient;
30 43
import com.umeng.analytics.MobclickAgent;
31 44
45
import java.io.File;
32 46
import java.net.URLEncoder;
33 47
import java.util.HashMap;
48
import java.util.List;
34 49
35 50
import cn.sharesdk.framework.Platform;
36 51
import cn.sharesdk.framework.PlatformActionListener;
@ -38,8 +53,10 @@ import cn.sharesdk.framework.ShareSDK;
38 53
import cn.sharesdk.onekeyshare.OnekeyShare;
39 54
import cn.sharesdk.wechat.friends.Wechat;
40 55
import cn.sharesdk.wechat.moments.WechatMoments;
56
import pub.devrel.easypermissions.AfterPermissionGranted;
57
import pub.devrel.easypermissions.EasyPermissions;
41 58
42
public class HomeWebActivity extends Activity implements View.OnClickListener, PlatformActionListener {
59
public class HomeWebActivity extends Activity implements View.OnClickListener, PlatformActionListener,EasyPermissions.PermissionCallbacks {
43 60
    private WebView webView;
44 61
    private ImageView iv_back, iv_close;
45 62
    private TextView txtTitle, tv_next;
@ -50,6 +67,11 @@ public class HomeWebActivity extends Activity implements View.OnClickListener, P
50 67
    private String index = "0";
51 68
    public static String ok = "";
52 69
70
    private static final int RC_ALBUM_PERM = 127;
71
    private final static int FILE_CHOOSER_RESULT_CODE = 128;  // 图片
72
    private final static int FILE_CAMERA_RESULT_CODE = 129; // 拍照
73
    private String cameraFilePath;  // 拍照图片路径
74
53 75
    @SuppressLint("SetJavaScriptEnabled")
54 76
    @Override
55 77
    protected void onCreate(Bundle savedInstanceState) {
@ -87,60 +109,14 @@ public class HomeWebActivity extends Activity implements View.OnClickListener, P
87 109
        tv_next = (TextView) findViewById(R.id.tv_next);
88 110
        tv_next.setOnClickListener(this);
89 111
90
        WebChromeClient wvcc = new WebChromeClient() {
91
            @Override
92
            public void onReceivedTitle(WebView view, String title) {
93
                super.onReceivedTitle(view, title);
94
                Log.d("ANDROID_LAB", "TITLE=" + title);
95
                txtTitle.setText(title);
96
            }
97
98
        };
99
100
101
        // 设置setWebChromeClient对象
102
        webView.setWebChromeClient(wvcc);
103
104
//         创建WebViewClient对象
105
//        WebViewClient wvc = new WebViewClient() {
106
//            @Override
107
//            public boolean shouldOverrideUrlLoading(WebView view, String url) {
108
//                // 使用自己的WebView组件来响应Url加载事件,而不是使用默认浏览器器加载页面
109
//                webView.loadUrl(url);
110
//                // 消耗掉这个事件。Android中返回True的即到此为止吧,事件就会不会冒泡传递了,我们称之为消耗掉
111
//                return true;
112
//            }
113
//        };
114
//        webView.setWebViewClient(wvc);
115
//        long appTime1 = System.currentTimeMillis() / 1000;
116
//        Log.i("appTime(long)---", appTime1 + "");
117
//        long updatetime = appTime1 - MainFragment.cha -5;
118
//        Log.i("updatetime(long)---", updatetime + "");
119
//        Log.i("cha---", MainFragment.cha + "");
120
//        String token = String.valueOf(updatetime);
121
//        String encode_token = DES3.encode(token);
122
//        String replace = URLEncoder.encode(encode_token);
123
//        String urlweb = "http://h5.edaijia.cn/app/index.html";
124
        Log.e("url", urlweb);
125 112
        webView.loadUrl(urlweb);
126
//        webView.loadUrl("http://www.d1ev.com/app/chondian/and38.html");
127
//        webView.loadUrl("www.baidu.com");
128
//        WebSettings settings = webView.getSettings();
129
//        Display display = this.getWindowManager().getDefaultDisplay();
130
//        if (display.getHeight() < display.getWidth()) {
131
//            screenHeight = display.getWidth();
132
//            screenWidth = display.getHeight();
133
//        } else {
134
//            screenWidth = display.getWidth();
135
//            screenHeight = display.getHeight();
136
//        }
137
//
138
//        webView.setMinimumHeight(screenHeight);
139
//        webView.setMinimumWidth(screenWidth);
140 113
        webView.getSettings().setSupportZoom(true);
141 114
        webView.getSettings().setBuiltInZoomControls(true);
142 115
        webView.getSettings().setJavaScriptEnabled(true);
143 116
        webView.getSettings().setDatabaseEnabled(true);
117
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
118
            webView.getSettings().setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW);
119
        }
144 120
        String dir = this.getApplicationContext().getDir("database", Context.MODE_PRIVATE).getPath();
145 121
146 122
        //启用地理定位
@ -150,9 +126,6 @@ public class HomeWebActivity extends Activity implements View.OnClickListener, P
150 126
//        webView.getSettings().setGeolocationEnabled(true);
151 127
        webView.setWebChromeClient(mOpenFileWebChromeClient);
152 128
        webView.addJavascriptInterface(this, "cdz");
153
154
//        webView.setWebChromeClient(((H5Activity) mContext).mOpenFileWebChromeClient);
155
156 129
        webView.getSettings().setDomStorageEnabled(true);
157 130
158 131
        webView.setWebViewClient(new WebViewClient() {
@ -734,6 +707,240 @@ public class HomeWebActivity extends Activity implements View.OnClickListener, P
734 707
        super.onPause();
735 708
        MobclickAgent.onPause(this);
736 709
    }
710
    @Override
711
    public void onRequestPermissionsResult(int requestCode,
712
                                           @NonNull String[] permissions,
713
                                           @NonNull int[] grantResults) {
714
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
715
716
        // EasyPermissions handles the request result.
717
        EasyPermissions.onRequestPermissionsResult(requestCode, permissions, grantResults, this);
718
    }
719
720
    @Override
721
    public void onPermissionsGranted(int requestCode, List<String> perms) {
722
723
    }
724
725
    @Override
726
    public void onPermissionsDenied(int requestCode, List<String> perms) {
727
728
    }
729
730
    public class OpenFileWebChromeClient extends WebChromeClient {
731
        public static final int REQUEST_FILE_PICKER = 1;
732
        public ValueCallback<Uri> mFilePathCallback;
733
        public ValueCallback<Uri[]> mFilePathCallbacks;
734
        Activity mContext;
735
736
        public OpenFileWebChromeClient(Activity mContext) {
737
            super();
738
            this.mContext = mContext;
739
        }
740
741
        @Override
742
        public void onReceivedTitle(WebView view, String title) {
743
            super.onReceivedTitle(view, title);
744
            Log.d("ANDROID_LAB", "TITLE=" + title);
745
            txtTitle.setText(title);
746
        }
747
748
        @Override
749
        public void onProgressChanged(WebView view, int newProgress) {
750
            super.onProgressChanged(view, newProgress);
751
//            pb_webBar.setProgress(newProgress);
752
        }
753
754
        @Override
755
        public void onGeolocationPermissionsShowPrompt(String origin,
756
                                                       GeolocationPermissions.Callback callback) {
757
            callback.invoke(origin, true, false);
758
            // TODO Auto-generated method stub
759
            super.onGeolocationPermissionsShowPrompt(origin, callback);
760
        }
761
762
        // Android < 3.0 调用这个方法
763
        public void openFileChooser(ValueCallback<Uri> filePathCallback) {
764
            mFilePathCallback = filePathCallback;
765
            permissionTask();
766
        }
767
768
        // 3.0 + 调用这个方法
769
        public void openFileChooser(ValueCallback filePathCallback, String acceptType) {
770
            mFilePathCallback = filePathCallback;
771
            permissionTask();
772
        }
773
774
        // / js上传文件的<input type="file" name="fileField" id="fileField" />事件捕获
775
        // Android > 4.1.1 调用这个方法
776
        public void openFileChooser(ValueCallback<Uri> filePathCallback, String acceptType, String capture) {
777
            mFilePathCallback = filePathCallback;
778
            permissionTask();
779
        }
780
781
        @Override
782
        public boolean onShowFileChooser(WebView webView, ValueCallback<Uri[]> filePathCallback, FileChooserParams fileChooserParams) {
783
            mFilePathCallbacks = filePathCallback;
784
            permissionTask();
785
            return true;
786
        }
787
    }
788
789
    @AfterPermissionGranted(RC_ALBUM_PERM)
790
    public void permissionTask() {
791
        if (isPermissionOK()) {
792
            openImageChooserActivity();
793
        } else {
794
            EasyPermissions.requestPermissions(
795
                    this, "充电桩想要获取您的图片读取权限,是否允许?",
796
                    RC_ALBUM_PERM,
797
                    Manifest.permission.CAMERA,
798
                    Manifest.permission.WRITE_EXTERNAL_STORAGE,
799
                    Manifest.permission.READ_EXTERNAL_STORAGE);
800
        }
801
    }
802
803
    private boolean isPermissionOK() {
804
        return EasyPermissions.hasPermissions(this,
805
                Manifest.permission.WRITE_EXTERNAL_STORAGE,
806
                Manifest.permission.READ_EXTERNAL_STORAGE,
807
                Manifest.permission.CAMERA
808
        );
809
    }
810
811
    private void openImageChooserActivity() {
812
        new MaterialDialog.Builder(this).items(R.array.photo).positiveText("取消")
813
                .onPositive(new MaterialDialog.SingleButtonCallback() {
814
                    @Override
815
                    public void onClick(@NonNull MaterialDialog dialog, @NonNull DialogAction which) {
816
                        if (mOpenFileWebChromeClient.mFilePathCallbacks != null) {
817
                            mOpenFileWebChromeClient.mFilePathCallbacks.onReceiveValue(null);
818
                            mOpenFileWebChromeClient.mFilePathCallbacks = null;
819
                        }
820
821
                        if (mOpenFileWebChromeClient.mFilePathCallback != null) {
822
                            mOpenFileWebChromeClient.mFilePathCallback.onReceiveValue(null);
823
                            mOpenFileWebChromeClient.mFilePathCallback = null;
824
                        }
825
                        dialog.dismiss();
826
                    }
827
                }).cancelable(false)
828
                .canceledOnTouchOutside(false).itemsCallback(new MaterialDialog.ListCallback() {
829
            @Override
830
            public void onSelection(MaterialDialog dialog, View itemView, int position, CharSequence text) {
831
                if (position == 0){
832
                    takeCamera();
833
                } else if (position == 1) {
834
                    takePhoto();
835
                }
836
            }
837
        }).show();
838
    }
839
840
    // 选择图片
841
    private void takePhoto() {
842
        Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
843
        intent.addCategory(Intent.CATEGORY_OPENABLE);
844
        intent.setType("image/*");
845
        startActivityForResult(Intent.createChooser(intent, "Image Choose"), FILE_CHOOSER_RESULT_CODE);
846
    }
847
848
    // 拍照
849
    private void takeCamera() {
850
        Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
851
        if (ImageUitl.hasSdcard()) {
852
            String fileName = "android" + System.currentTimeMillis() / 1000 + ".jpg";
853
            cameraFilePath = ImageUitl.getPath(Environment.getExternalStorageDirectory() + "/" + "cdz") + "/" + fileName;
854
            File imageFile = ImageUitl.getFile(cameraFilePath);
855
            Uri uri = parseUri(imageFile);
856
            intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);
857
            try{
858
                startActivityForResult(intent, FILE_CAMERA_RESULT_CODE);
859
            } catch (Exception e) {
860
                e.printStackTrace();
861
            }
862
863
        }
864
    }
865
866
    private Uri parseUri(File cameraFile) {
867
        Uri imageUri;
868
        String authority = getPackageName() + ".provider";
869
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
870
            //通过FileProvider创建一个content类型的Uri
871
            imageUri = FileProvider.getUriForFile(getApplicationContext(), authority, cameraFile);
872
        } else {
873
            imageUri = Uri.fromFile(cameraFile);
874
        }
875
        return imageUri;
876
    }
877
878
    @Override
879
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
880
        super.onActivityResult(requestCode, resultCode, data);
881
        if (null == mOpenFileWebChromeClient.mFilePathCallback && null == mOpenFileWebChromeClient.mFilePathCallbacks) return;
882
        if (resultCode != RESULT_OK) {
883
            if (mOpenFileWebChromeClient.mFilePathCallbacks != null) {
884
                mOpenFileWebChromeClient.mFilePathCallbacks.onReceiveValue(null);
885
                mOpenFileWebChromeClient.mFilePathCallbacks = null;
886
            }
887
888
            if (mOpenFileWebChromeClient.mFilePathCallback != null) {
889
                mOpenFileWebChromeClient.mFilePathCallback.onReceiveValue(null);
890
                mOpenFileWebChromeClient.mFilePathCallback = null;
891
            }
892
            return;
893
        }
894
895
        Uri result = null;
896
        if (requestCode == FILE_CAMERA_RESULT_CODE) {
897
            if (null != data && null != data.getData()) {
898
                result = data.getData();
899
            }
900
            if (result == null && ImageUitl.hasFile(cameraFilePath)) {
901
                result = Uri.fromFile(new File(cameraFilePath));
902
            }
903
904
            if (mOpenFileWebChromeClient.mFilePathCallbacks != null) {
905
                mOpenFileWebChromeClient.mFilePathCallbacks.onReceiveValue(new Uri[]{result});
906
                mOpenFileWebChromeClient.mFilePathCallbacks = null;
907
            } else if (mOpenFileWebChromeClient.mFilePathCallback != null) {
908
                mOpenFileWebChromeClient.mFilePathCallback.onReceiveValue(result);
909
                mOpenFileWebChromeClient.mFilePathCallback = null;
910
            }
911
        } else if (requestCode == FILE_CHOOSER_RESULT_CODE) {
912
            if (data != null) {
913
                result = data.getData();
914
            }
915
            if (mOpenFileWebChromeClient.mFilePathCallbacks != null) {
916
                onActivityResultCallbacks(data);
917
            } else if (mOpenFileWebChromeClient.mFilePathCallback != null) {
918
                mOpenFileWebChromeClient.mFilePathCallback.onReceiveValue(result);
919
                mOpenFileWebChromeClient.mFilePathCallback = null;
920
            }
921
        }
922
    }
923
924
    @TargetApi(Build.VERSION_CODES.LOLLIPOP)
925
    private void onActivityResultCallbacks(Intent intent) {
926
        Uri[] results = null;
927
        if (intent != null) {
928
            String dataString = intent.getDataString();
929
            ClipData clipData = intent.getClipData();
930
            if (clipData != null) {
931
                results = new Uri[clipData.getItemCount()];
932
                for (int i=0;i<clipData.getItemCount();i++) {
933
                    ClipData.Item item = clipData.getItemAt(i);
934
                    results[i] = item.getUri();
935
                }
936
            }
937
            if (dataString != null) {
938
                results = new Uri[] {Uri.parse(dataString)};
939
            }
940
            mOpenFileWebChromeClient.mFilePathCallbacks.onReceiveValue(results);
941
            mOpenFileWebChromeClient.mFilePathCallbacks = null;
942
        }
943
    }
737 944
738 945
739 946
}

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

@ -5548,6 +5548,8 @@ public class MainMapActivity extends Activity implements LocationSource, AMapLoc
5548 5548
                            } else {
5549 5549
                                url = MainApplication.list_addetail.get(result).getUrl() + "?cdzshareid=" + MainApplication.list_addetail.get(result).getId();
5550 5550
                            }
5551
//                            url = "http://192.168.1.104:8000/";
5552
//                            url = "https://www.d1ev.com/special/t/application.html?s=JUU1JUE1JTg3JUU3JTkxJTlFJUU1JUIwJThGJUU4JTlBJTgyJUU4JTlBJTgxLCVFNiVBQyVBNyVFNiU4QiU4OVIxLCVFNSU4QyU5NyVFNiVCMSVCREVDMw==";
5551 5553
5552 5554
//                                intent_text,intent_icon,intent_title,intent_url;
5553 5555
                            intent145.putExtra("url", url);

+ 187 - 60
app/src/main/java/com/electric/chargingpile/activity/MyWebViewActivity.java

@ -16,7 +16,11 @@ import android.net.Uri;
16 16
import android.net.http.SslError;
17 17
import android.os.Build;
18 18
import android.os.Bundle;
19
import android.os.Environment;
19 20
import android.os.Handler;
21
import android.provider.MediaStore;
22
import android.support.annotation.NonNull;
23
import android.support.v4.content.FileProvider;
20 24
import android.util.Log;
21 25
import android.view.KeyEvent;
22 26
import android.view.View;
@ -27,6 +31,7 @@ import android.webkit.SslErrorHandler;
27 31
import android.webkit.ValueCallback;
28 32
import android.webkit.WebBackForwardList;
29 33
import android.webkit.WebChromeClient;
34
import android.webkit.WebSettings;
30 35
import android.webkit.WebView;
31 36
import android.webkit.WebViewClient;
32 37
import android.widget.ImageView;
@ -35,6 +40,8 @@ import android.widget.RelativeLayout;
35 40
import android.widget.TextView;
36 41
import android.widget.Toast;
37 42
43
import com.afollestad.materialdialogs.DialogAction;
44
import com.afollestad.materialdialogs.MaterialDialog;
38 45
import com.blankj.utilcode.util.LogUtils;
39 46
import com.electric.chargingpile.R;
40 47
import com.electric.chargingpile.application.MainApplication;
@ -43,6 +50,7 @@ import com.electric.chargingpile.data.User;
43 50
import com.electric.chargingpile.manager.ProfileManager;
44 51
import com.electric.chargingpile.util.BarColorUtil;
45 52
import com.electric.chargingpile.util.DES3;
53
import com.electric.chargingpile.util.ImageUitl;
46 54
import com.electric.chargingpile.util.JsonUtils;
47 55
import com.electric.chargingpile.util.MediaUtility;
48 56
import com.electric.chargingpile.util.ToastUtil;
@ -95,6 +103,11 @@ public class MyWebViewActivity extends Activity implements PlatformActionListene
95 103
    private android.view.animation.Animation animation;
96 104
    private static final int RC_CALL_PERM = 123;
97 105
106
    private static final int RC_ALBUM_PERM = 127;
107
    private final static int FILE_CHOOSER_RESULT_CODE = 128;  // 图片
108
    private final static int FILE_CAMERA_RESULT_CODE = 129; // 拍照
109
    private String cameraFilePath;  // 拍照图片路径
110
98 111
    @Override
99 112
    protected void onCreate(Bundle savedInstanceState) {
100 113
        super.onCreate(savedInstanceState);
@ -160,6 +173,9 @@ public class MyWebViewActivity extends Activity implements PlatformActionListene
160 173
        webView.getSettings().setGeolocationDatabasePath(dir);
161 174
        webView.setWebChromeClient(mOpenFileWebChromeClient);
162 175
        webView.getSettings().setDomStorageEnabled(true);
176
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
177
            webView.getSettings().setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW);
178
        }
163 179
//        webView.getSettings().setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);
164 180
        webView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true); //支持通过JS打开新窗口
165 181
        webView.addJavascriptInterface(this, "cdz");
@ -1219,16 +1235,30 @@ public class MyWebViewActivity extends Activity implements PlatformActionListene
1219 1235
    }
1220 1236
1221 1237
    @Override
1238
    public void onRequestPermissionsResult(int requestCode,
1239
                                           @NonNull String[] permissions,
1240
                                           @NonNull int[] grantResults) {
1241
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
1242
1243
        // EasyPermissions handles the request result.
1244
        EasyPermissions.onRequestPermissionsResult(requestCode, permissions, grantResults, this);
1245
    }
1246
1247
    @Override
1222 1248
    public void onPermissionsGranted(int requestCode, List<String> perms) {
1223 1249
1224 1250
    }
1225 1251
1226 1252
    @Override
1227 1253
    public void onPermissionsDenied(int requestCode, List<String> perms) {
1228
        if (EasyPermissions.somePermissionPermanentlyDenied(this, perms)) {
1229
            new AppSettingsDialog.Builder(MyWebViewActivity.this,
1230
                    "该功能需要开启拨号权限,是否前往开启?").build().show();
1254
        if (requestCode == RC_ALBUM_PERM) {
1255
            mOpenFileWebChromeClient.mFilePathCallback = null;
1256
            mOpenFileWebChromeClient.mFilePathCallbacks = null;
1231 1257
        }
1258
//        if (EasyPermissions.somePermissionPermanentlyDenied(this, perms)) {
1259
//            new AppSettingsDialog.Builder(MyWebViewActivity.this,
1260
//                    "该功能需要开启拨号权限,是否前往开启?").build().show();
1261
//        }
1232 1262
    }
1233 1263
1234 1264
    private boolean hasCallPhonePermission() {
@ -1270,52 +1300,119 @@ public class MyWebViewActivity extends Activity implements PlatformActionListene
1270 1300
        // Android < 3.0 调用这个方法
1271 1301
        public void openFileChooser(ValueCallback<Uri> filePathCallback) {
1272 1302
            mFilePathCallback = filePathCallback;
1273
            Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
1274
            intent.addCategory(Intent.CATEGORY_OPENABLE);
1275
            intent.setType("*/*");
1276
            mContext.startActivityForResult(
1277
                    Intent.createChooser(intent, "File Chooser"),
1278
                    REQUEST_FILE_PICKER);
1303
            permissionTask();
1279 1304
        }
1280 1305
1281 1306
        // 3.0 + 调用这个方法
1282
        public void openFileChooser(ValueCallback filePathCallback,
1283
                                    String acceptType) {
1307
        public void openFileChooser(ValueCallback filePathCallback, String acceptType) {
1284 1308
            mFilePathCallback = filePathCallback;
1285
            Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
1286
            intent.addCategory(Intent.CATEGORY_OPENABLE);
1287
            intent.setType("*/*");
1288
            mContext.startActivityForResult(
1289
                    Intent.createChooser(intent, "File Chooser"),
1290
                    REQUEST_FILE_PICKER);
1309
            permissionTask();
1291 1310
        }
1292 1311
1293 1312
        // / js上传文件的<input type="file" name="fileField" id="fileField" />事件捕获
1294 1313
        // Android > 4.1.1 调用这个方法
1295
        public void openFileChooser(ValueCallback<Uri> filePathCallback,
1296
                                    String acceptType, String capture) {
1314
        public void openFileChooser(ValueCallback<Uri> filePathCallback, String acceptType, String capture) {
1297 1315
            mFilePathCallback = filePathCallback;
1298
            Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
1299
            intent.addCategory(Intent.CATEGORY_OPENABLE);
1300
            intent.setType("*/*");
1301
            mContext.startActivityForResult(
1302
                    Intent.createChooser(intent, "File Chooser"),
1303
                    REQUEST_FILE_PICKER);
1316
            permissionTask();
1304 1317
        }
1305 1318
1306
        public boolean onShowFileChooser(WebView webView,
1307
                                         ValueCallback<Uri[]> filePathCallback) {
1319
        @Override
1320
        public boolean onShowFileChooser(WebView webView, ValueCallback<Uri[]> filePathCallback, FileChooserParams fileChooserParams) {
1308 1321
            mFilePathCallbacks = filePathCallback;
1309
            Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
1310
            intent.addCategory(Intent.CATEGORY_OPENABLE);
1311
            intent.setType("*/*");
1312
            mContext.startActivityForResult(
1313
                    Intent.createChooser(intent, "File Chooser"),
1314
                    REQUEST_FILE_PICKER);
1322
            permissionTask();
1315 1323
            return true;
1316 1324
        }
1317 1325
    }
1318 1326
1327
    @AfterPermissionGranted(RC_ALBUM_PERM)
1328
    public void permissionTask() {
1329
        if (isPermissionOK()) {
1330
            openImageChooserActivity();
1331
        } else {
1332
            EasyPermissions.requestPermissions(
1333
                    this, "充电桩想要获取您的图片读取权限,是否允许?",
1334
                    RC_ALBUM_PERM,
1335
                    Manifest.permission.CAMERA,
1336
                    Manifest.permission.WRITE_EXTERNAL_STORAGE,
1337
                    Manifest.permission.READ_EXTERNAL_STORAGE);
1338
        }
1339
    }
1340
1341
    private boolean isPermissionOK() {
1342
        return EasyPermissions.hasPermissions(this,
1343
                Manifest.permission.WRITE_EXTERNAL_STORAGE,
1344
                Manifest.permission.READ_EXTERNAL_STORAGE,
1345
                Manifest.permission.CAMERA
1346
        );
1347
    }
1348
1349
    private void openImageChooserActivity() {
1350
        new MaterialDialog.Builder(this).items(R.array.photo).positiveText("取消")
1351
                .onPositive(new MaterialDialog.SingleButtonCallback() {
1352
                    @Override
1353
                    public void onClick(@NonNull MaterialDialog dialog, @NonNull DialogAction which) {
1354
                        if (mOpenFileWebChromeClient.mFilePathCallbacks != null) {
1355
                            mOpenFileWebChromeClient.mFilePathCallbacks.onReceiveValue(null);
1356
                            mOpenFileWebChromeClient.mFilePathCallbacks = null;
1357
                        }
1358
1359
                        if (mOpenFileWebChromeClient.mFilePathCallback != null) {
1360
                            mOpenFileWebChromeClient.mFilePathCallback.onReceiveValue(null);
1361
                            mOpenFileWebChromeClient.mFilePathCallback = null;
1362
                        }
1363
                        dialog.dismiss();
1364
                    }
1365
                }).cancelable(false)
1366
                .canceledOnTouchOutside(false).itemsCallback(new MaterialDialog.ListCallback() {
1367
            @Override
1368
            public void onSelection(MaterialDialog dialog, View itemView, int position, CharSequence text) {
1369
                if (position == 0){
1370
                    takeCamera();
1371
                } else if (position == 1) {
1372
                    takePhoto();
1373
                }
1374
            }
1375
        }).show();
1376
    }
1377
1378
    // 选择图片
1379
    private void takePhoto() {
1380
        Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
1381
        intent.addCategory(Intent.CATEGORY_OPENABLE);
1382
        intent.setType("image/*");
1383
        startActivityForResult(Intent.createChooser(intent, "Image Choose"), FILE_CHOOSER_RESULT_CODE);
1384
    }
1385
1386
    // 拍照
1387
    private void takeCamera() {
1388
        Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
1389
        if (ImageUitl.hasSdcard()) {
1390
            String fileName = "android" + System.currentTimeMillis() / 1000 + ".jpg";
1391
            cameraFilePath = ImageUitl.getPath(Environment.getExternalStorageDirectory() + "/" + "cdz") + "/" + fileName;
1392
            File imageFile = ImageUitl.getFile(cameraFilePath);
1393
            Uri uri = parseUri(imageFile);
1394
            intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);
1395
            try{
1396
                startActivityForResult(intent, FILE_CAMERA_RESULT_CODE);
1397
            } catch (Exception e) {
1398
                e.printStackTrace();
1399
            }
1400
1401
        }
1402
    }
1403
1404
    private Uri parseUri(File cameraFile) {
1405
        Uri imageUri;
1406
        String authority = getPackageName() + ".provider";
1407
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
1408
            //通过FileProvider创建一个content类型的Uri
1409
            imageUri = FileProvider.getUriForFile(getApplicationContext(), authority, cameraFile);
1410
        } else {
1411
            imageUri = Uri.fromFile(cameraFile);
1412
        }
1413
        return imageUri;
1414
    }
1415
1319 1416
    public class MyWebViewClient extends WebViewClient {
1320 1417
        @Override
1321 1418
        public void onPageStarted(WebView view, String url, Bitmap favicon) {
@ -1366,38 +1463,68 @@ public class MyWebViewActivity extends Activity implements PlatformActionListene
1366 1463
    }
1367 1464
1368 1465
    @Override
1369
    public void onActivityResult(int requestCode, int resultCode, Intent intent) {
1370
        if (requestCode == OpenFileWebChromeClient.REQUEST_FILE_PICKER) {
1466
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
1467
        super.onActivityResult(requestCode, resultCode, data);
1468
        if (null == mOpenFileWebChromeClient.mFilePathCallback && null == mOpenFileWebChromeClient.mFilePathCallbacks) return;
1469
        if (resultCode != RESULT_OK) {
1470
            if (mOpenFileWebChromeClient.mFilePathCallbacks != null) {
1471
                mOpenFileWebChromeClient.mFilePathCallbacks.onReceiveValue(null);
1472
                mOpenFileWebChromeClient.mFilePathCallbacks = null;
1473
            }
1474
1371 1475
            if (mOpenFileWebChromeClient.mFilePathCallback != null) {
1372
                Uri result = intent == null || resultCode != Activity.RESULT_OK ? null
1373
                        : intent.getData();
1374
                if (result != null) {
1375
                    String path = MediaUtility.getPath(getApplicationContext(),
1376
                            result);
1377
                    Uri uri = Uri.fromFile(new File(path));
1378
                    mOpenFileWebChromeClient.mFilePathCallback
1379
                            .onReceiveValue(uri);
1380
                } else {
1381
                    mOpenFileWebChromeClient.mFilePathCallback
1382
                            .onReceiveValue(null);
1383
                }
1476
                mOpenFileWebChromeClient.mFilePathCallback.onReceiveValue(null);
1477
                mOpenFileWebChromeClient.mFilePathCallback = null;
1384 1478
            }
1479
            return;
1480
        }
1481
1482
        Uri result = null;
1483
        if (requestCode == FILE_CAMERA_RESULT_CODE) {
1484
            if (null != data && null != data.getData()) {
1485
                result = data.getData();
1486
            }
1487
            if (result == null && ImageUitl.hasFile(cameraFilePath)) {
1488
                result = Uri.fromFile(new File(cameraFilePath));
1489
            }
1490
1385 1491
            if (mOpenFileWebChromeClient.mFilePathCallbacks != null) {
1386
                Uri result = intent == null || resultCode != Activity.RESULT_OK ? null
1387
                        : intent.getData();
1388
                if (result != null) {
1389
                    String path = MediaUtility.getPath(getApplicationContext(),
1390
                            result);
1391
                    Uri uri = Uri.fromFile(new File(path));
1392
                    mOpenFileWebChromeClient.mFilePathCallbacks
1393
                            .onReceiveValue(new Uri[]{uri});
1394
                } else {
1395
                    mOpenFileWebChromeClient.mFilePathCallbacks
1396
                            .onReceiveValue(null);
1397
                }
1492
                mOpenFileWebChromeClient.mFilePathCallbacks.onReceiveValue(new Uri[]{result});
1493
                mOpenFileWebChromeClient.mFilePathCallbacks = null;
1494
            } else if (mOpenFileWebChromeClient.mFilePathCallback != null) {
1495
                mOpenFileWebChromeClient.mFilePathCallback.onReceiveValue(result);
1496
                mOpenFileWebChromeClient.mFilePathCallback = null;
1497
            }
1498
        } else if (requestCode == FILE_CHOOSER_RESULT_CODE) {
1499
            if (data != null) {
1500
                result = data.getData();
1501
            }
1502
            if (mOpenFileWebChromeClient.mFilePathCallbacks != null) {
1503
                onActivityResultCallbacks(data);
1504
            } else if (mOpenFileWebChromeClient.mFilePathCallback != null) {
1505
                mOpenFileWebChromeClient.mFilePathCallback.onReceiveValue(result);
1506
                mOpenFileWebChromeClient.mFilePathCallback = null;
1398 1507
            }
1508
        }
1509
    }
1399 1510
1400
            mOpenFileWebChromeClient.mFilePathCallback = null;
1511
    @TargetApi(Build.VERSION_CODES.LOLLIPOP)
1512
    private void onActivityResultCallbacks(Intent intent) {
1513
        Uri[] results = null;
1514
        if (intent != null) {
1515
            String dataString = intent.getDataString();
1516
            ClipData clipData = intent.getClipData();
1517
            if (clipData != null) {
1518
                results = new Uri[clipData.getItemCount()];
1519
                for (int i=0;i<clipData.getItemCount();i++) {
1520
                    ClipData.Item item = clipData.getItemAt(i);
1521
                    results[i] = item.getUri();
1522
                }
1523
            }
1524
            if (dataString != null) {
1525
                results = new Uri[] {Uri.parse(dataString)};
1526
            }
1527
            mOpenFileWebChromeClient.mFilePathCallbacks.onReceiveValue(results);
1401 1528
            mOpenFileWebChromeClient.mFilePathCallbacks = null;
1402 1529
        }
1403 1530
    }

+ 43 - 0
app/src/main/java/com/electric/chargingpile/util/ImageUitl.java

@ -7,11 +7,13 @@ import android.graphics.Bitmap;
7 7
import android.graphics.BitmapFactory;
8 8
import android.graphics.Matrix;
9 9
import android.net.Uri;
10
import android.os.Environment;
10 11
import android.util.Log;
11 12
12 13
import java.io.ByteArrayInputStream;
13 14
import java.io.ByteArrayOutputStream;
14 15
import java.io.File;
16
import java.io.IOException;
15 17
import java.io.InputStream;
16 18
17 19
/**
@ -396,4 +398,45 @@ public class ImageUitl {
396 398
        bitmap = compressImage(bitmap, 100);//质量压缩
397 399
        return bitmap;
398 400
    }
401
402
    public static boolean hasSdcard() {
403
        if (android.os.Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)) {
404
            return true;
405
        } else {
406
            return false;
407
        }
408
    }
409
410
    public static String getPath(String path) {
411
        File f = new File(path);
412
        if (!f.exists()) {
413
            f.mkdirs();
414
        }
415
        return f.getAbsolutePath();
416
    }
417
418
    public static File getFile(String path) {
419
        File f = new File(path);
420
        if (!f.exists()) {
421
            try {
422
                f.createNewFile();
423
            } catch (IOException e) {
424
                e.printStackTrace();
425
            }
426
        }
427
        return f;
428
    }
429
430
    public static boolean hasFile(String path) {
431
        try {
432
            File f = new File(path);
433
            if (!f.exists()) {
434
                return false;
435
            }
436
        } catch (Exception e) {
437
            return false;
438
        }
439
        return true;
440
    }
441
399 442
}

+ 0 - 72
app/src/main/java/com/electric/chargingpile/util/OpenFileWebChromeClient.java

@ -1,72 +0,0 @@
1
package com.electric.chargingpile.util;
2
3
import android.app.Activity;
4
import android.content.Intent;
5
import android.net.Uri;
6
import android.webkit.ValueCallback;
7
import android.webkit.WebChromeClient;
8
import android.webkit.WebView;
9
10
/**
11
 * Created by Demon on 16/7/19.
12
 */
13
14
public class OpenFileWebChromeClient extends WebChromeClient {
15
    public static final int REQUEST_FILE_PICKER = 1;
16
    public ValueCallback<Uri> mFilePathCallback;
17
    public ValueCallback<Uri[]> mFilePathCallbacks;
18
    Activity mContext;
19
20
    public OpenFileWebChromeClient(Activity mContext) {
21
        super();
22
        this.mContext = mContext;
23
    }
24
25
    // Android < 3.0 调用这个方法
26
    public void openFileChooser(ValueCallback<Uri> filePathCallback) {
27
        mFilePathCallback = filePathCallback;
28
        Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
29
        intent.addCategory(Intent.CATEGORY_OPENABLE);
30
        intent.setType("*/*");
31
        mContext.startActivityForResult(Intent.createChooser(intent, "File Chooser"),
32
                REQUEST_FILE_PICKER);
33
    }
34
35
    // 3.0 + 调用这个方法
36
    public void openFileChooser(ValueCallback filePathCallback,
37
                                String acceptType) {
38
        mFilePathCallback = filePathCallback;
39
        Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
40
        intent.addCategory(Intent.CATEGORY_OPENABLE);
41
        intent.setType("*/*");
42
        mContext.startActivityForResult(Intent.createChooser(intent, "File Chooser"),
43
                REQUEST_FILE_PICKER);
44
    }
45
46
    //  / js上传文件的<input type="file" name="fileField" id="fileField" />事件捕获
47
    // Android > 4.1.1 调用这个方法
48
    public void openFileChooser(ValueCallback<Uri> filePathCallback,
49
                                String acceptType, String capture) {
50
        mFilePathCallback = filePathCallback;
51
        Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
52
        intent.addCategory(Intent.CATEGORY_OPENABLE);
53
        intent.setType("*/*");
54
        mContext.startActivityForResult(Intent.createChooser(intent, "File Chooser"),
55
                REQUEST_FILE_PICKER);
56
    }
57
58
    @Override
59
    public boolean onShowFileChooser(WebView webView,
60
                                     ValueCallback<Uri[]> filePathCallback,
61
                                     WebChromeClient.FileChooserParams fileChooserParams) {
62
        mFilePathCallbacks = filePathCallback;
63
        Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
64
        intent.addCategory(Intent.CATEGORY_OPENABLE);
65
        intent.setType("*/*");
66
        mContext.startActivityForResult(Intent.createChooser(intent, "File Chooser"),
67
                REQUEST_FILE_PICKER);
68
        return true;
69
    }
70
71
72
}

+ 4 - 0
app/src/main/res/values/arrays.xml

@ -13,6 +13,10 @@
13 13
        <item>"Android provides a rich application framework that allows you to build innovative apps and games for mobile devices in a Java language environment. The documents listed in the left navigation provide details about how to build apps using Android's various APIs."</item>
14 14
        <item>"test"</item>
15 15
    </string-array>
16
    <string-array name="photo">
17
        <item>拍照</item>
18
        <item>照片图库</item>
19
    </string-array>
16 20
17 21
    <string-array name="color_arr">
18 22
        <item>@color/lvse</item>