//        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>

dudu/cdzApp - Gogs: Go Git Service

202 Коммиты (37c65e2f3413cefe22e1f810ad083a9ae726be11)

Автор SHA1 Сообщение Дата
  huyuguo 37c65e2f34 路径规划图标更换 лет назад: 7
  huyuguo 3475dc3e74 订单详情红包提示添加完成 лет назад: 7
  huyuguo d7c0a40019 气泡详情页,跳转聊聊功能开发完成 лет назад: 7
  huyuguo 1265adbc79 气泡详情页红包提示开发完成 лет назад: 7
  huyuguo 0931eeb1d8 详情页扫码充电开发完成 лет назад: 7
  huyuguo 30d68b28a4 锚点定位优化 лет назад: 7
  huyuguo f2c2eab7f1 发现界面字体更新 лет назад: 7
  huyuguo bb130dd6d6 桩点详情页图片更新 лет назад: 7
  huyuguo 3e0eed8d96 首页需求开发完成 лет назад: 7
  huyuguo 899b4e3422 扫码时防止24以下的系统奔溃 лет назад: 7
  huyuguo 5727c3417f 气泡需求开发 лет назад: 7
  huyuguo c1404b6fe9 气泡弹窗视图底部图标更换完成 лет назад: 7
  huyuguo b2ce8ed984 气泡开发完成 лет назад: 7
  huyuguo b54a935e28 气泡功能咖啡 лет назад: 7
  huyuguo d9cb8fae5d 图片资源添加 лет назад: 7
  huyuguo b530e3db7f 隐藏气泡 лет назад: 7
  huyuguo 2f6e352453 充电站图标更换 лет назад: 7
  huyuguo b79da5030c 充电图例修改 лет назад: 7
  huyuguo d96e303f23 测试版本名称修改 лет назад: 7
  huyuguo 16475d3bd0 小米6.0颜色适配 лет назад: 7
  huyuguo 06872804f2 去除混淆,解决视频无法选择的问题 лет назад: 7
  huyuguo 37102de79d 视图更新 лет назад: 7
  huyuguo 787b74f5e1 QQ分享问题解决 лет назад: 7
  huyuguo a246e8fb59 Update build.gradle лет назад: 7
  huyuguo 93c39632df 360首发图表去除 лет назад: 7
  huyuguo 18e7f3f28a 360配置 лет назад: 7
  huyuguo 595d445900 Update MainApplication.java лет назад: 7
  huyuguo a76fa646c4 360首发图表添加 лет назад: 7
  huyuguo dd1e1a6ace 视频上传修改完成 лет назад: 7
  huyuguo d701e74a1d 图片上传修改 лет назад: 7
  huyuguo c61766a64b 提交 лет назад: 7
  huyuguo df5e24fcff bug修改 лет назад: 7
  huyuguo d2f797f8fa bug解决 лет назад: 7
  huyuguo 78e1a07b30 分享功能开发完成 лет назад: 7
  huyuguo 35d08171e8 评论列表开发完成 лет назад: 7
  huyuguo 5336ca560f 代码更新 лет назад: 7
  huyuguo b891143db1 代码更新 лет назад: 7
  huyuguo 12bc29be92 评论功能开发完成 лет назад: 7
  huyuguo a0b6f49851 代码提交 лет назад: 7
  huyuguo 148e65f9d2 代码保存 лет назад: 7
  huyuguo 4645b9db66 代码修改 лет назад: 7
  huyuguo f748bbe347 评论列表开发 лет назад: 7
  huyuguo 918f6665be 详情页话题显示省略 лет назад: 7
  huyuguo 2c29f24729 代码修改 лет назад: 7
  huyuguo 49bf58e1c2 代码更新 лет назад: 7
  huyuguo 52210fe616 图片更新 лет назад: 7
  huyuguo aabf9cbc7a 代码优化 лет назад: 7
  huyuguo 62eeaa48e5 代码更新 лет назад: 7
  huyuguo 4993086aed 图片列表修改 лет назад: 7
  huyuguo 7c5715eaf6 照片列表开发 лет назад: 7