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;
@ -93,6 +101,11 @@ public class MyWebViewActivity extends Activity implements PlatformActionListene
93 101
    private android.view.animation.Animation animation;
94 102
    private static final int RC_CALL_PERM = 123;
95 103
104
    private static final int RC_ALBUM_PERM = 127;
105
    private final static int FILE_CHOOSER_RESULT_CODE = 128;  // 图片
106
    private final static int FILE_CAMERA_RESULT_CODE = 129; // 拍照
107
    private String cameraFilePath;  // 拍照图片路径
108
96 109
    @Override
97 110
    protected void onCreate(Bundle savedInstanceState) {
98 111
        super.onCreate(savedInstanceState);
@ -140,6 +153,9 @@ public class MyWebViewActivity extends Activity implements PlatformActionListene
140 153
        webView.getSettings().setGeolocationDatabasePath(dir);
141 154
        webView.setWebChromeClient(mOpenFileWebChromeClient);
142 155
        webView.getSettings().setDomStorageEnabled(true);
156
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
157
            webView.getSettings().setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW);
158
        }
143 159
//        webView.getSettings().setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);
144 160
        webView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true); //支持通过JS打开新窗口
145 161
        webView.addJavascriptInterface(this, "cdz");
@ -1199,16 +1215,30 @@ public class MyWebViewActivity extends Activity implements PlatformActionListene
1199 1215
    }
1200 1216
1201 1217
    @Override
1218
    public void onRequestPermissionsResult(int requestCode,
1219
                                           @NonNull String[] permissions,
1220
                                           @NonNull int[] grantResults) {
1221
        super.onRequestPermissionsResult(requestCode, permissions, grantResults);
1222
1223
        // EasyPermissions handles the request result.
1224
        EasyPermissions.onRequestPermissionsResult(requestCode, permissions, grantResults, this);
1225
    }
1226
1227
    @Override
1202 1228
    public void onPermissionsGranted(int requestCode, List<String> perms) {
1203 1229
1204 1230
    }
1205 1231
1206 1232
    @Override
1207 1233
    public void onPermissionsDenied(int requestCode, List<String> perms) {
1208
        if (EasyPermissions.somePermissionPermanentlyDenied(this, perms)) {
1209
            new AppSettingsDialog.Builder(MyWebViewActivity.this,
1210
                    "该功能需要开启拨号权限,是否前往开启?").build().show();
1234
        if (requestCode == RC_ALBUM_PERM) {
1235
            mOpenFileWebChromeClient.mFilePathCallback = null;
1236
            mOpenFileWebChromeClient.mFilePathCallbacks = null;
1211 1237
        }
1238
//        if (EasyPermissions.somePermissionPermanentlyDenied(this, perms)) {
1239
//            new AppSettingsDialog.Builder(MyWebViewActivity.this,
1240
//                    "该功能需要开启拨号权限,是否前往开启?").build().show();
1241
//        }
1212 1242
    }
1213 1243
1214 1244
    private boolean hasCallPhonePermission() {
@ -1250,52 +1280,119 @@ public class MyWebViewActivity extends Activity implements PlatformActionListene
1250 1280
        // Android < 3.0 调用这个方法
1251 1281
        public void openFileChooser(ValueCallback<Uri> filePathCallback) {
1252 1282
            mFilePathCallback = filePathCallback;
1253
            Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
1254
            intent.addCategory(Intent.CATEGORY_OPENABLE);
1255
            intent.setType("*/*");
1256
            mContext.startActivityForResult(
1257
                    Intent.createChooser(intent, "File Chooser"),
1258
                    REQUEST_FILE_PICKER);
1283
            permissionTask();
1259 1284
        }
1260 1285
1261 1286
        // 3.0 + 调用这个方法
1262
        public void openFileChooser(ValueCallback filePathCallback,
1263
                                    String acceptType) {
1287
        public void openFileChooser(ValueCallback filePathCallback, String acceptType) {
1264 1288
            mFilePathCallback = filePathCallback;
1265
            Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
1266
            intent.addCategory(Intent.CATEGORY_OPENABLE);
1267
            intent.setType("*/*");
1268
            mContext.startActivityForResult(
1269
                    Intent.createChooser(intent, "File Chooser"),
1270
                    REQUEST_FILE_PICKER);
1289
            permissionTask();
1271 1290
        }
1272 1291
1273 1292
        // / js上传文件的<input type="file" name="fileField" id="fileField" />事件捕获
1274 1293
        // Android > 4.1.1 调用这个方法
1275
        public void openFileChooser(ValueCallback<Uri> filePathCallback,
1276
                                    String acceptType, String capture) {
1294
        public void openFileChooser(ValueCallback<Uri> filePathCallback, String acceptType, String capture) {
1277 1295
            mFilePathCallback = filePathCallback;
1278
            Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
1279
            intent.addCategory(Intent.CATEGORY_OPENABLE);
1280
            intent.setType("*/*");
1281
            mContext.startActivityForResult(
1282
                    Intent.createChooser(intent, "File Chooser"),
1283
                    REQUEST_FILE_PICKER);
1296
            permissionTask();
1284 1297
        }
1285 1298
1286
        public boolean onShowFileChooser(WebView webView,
1287
                                         ValueCallback<Uri[]> filePathCallback) {
1299
        @Override
1300
        public boolean onShowFileChooser(WebView webView, ValueCallback<Uri[]> filePathCallback, FileChooserParams fileChooserParams) {
1288 1301
            mFilePathCallbacks = filePathCallback;
1289
            Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
1290
            intent.addCategory(Intent.CATEGORY_OPENABLE);
1291
            intent.setType("*/*");
1292
            mContext.startActivityForResult(
1293
                    Intent.createChooser(intent, "File Chooser"),
1294
                    REQUEST_FILE_PICKER);
1302
            permissionTask();
1295 1303
            return true;
1296 1304
        }
1297 1305
    }
1298 1306
1307
    @AfterPermissionGranted(RC_ALBUM_PERM)
1308
    public void permissionTask() {
1309
        if (isPermissionOK()) {
1310
            openImageChooserActivity();
1311
        } else {
1312
            EasyPermissions.requestPermissions(
1313
                    this, "充电桩想要获取您的图片读取权限,是否允许?",
1314
                    RC_ALBUM_PERM,
1315
                    Manifest.permission.CAMERA,
1316
                    Manifest.permission.WRITE_EXTERNAL_STORAGE,
1317
                    Manifest.permission.READ_EXTERNAL_STORAGE);
1318
        }
1319
    }
1320
1321
    private boolean isPermissionOK() {
1322
        return EasyPermissions.hasPermissions(this,
1323
                Manifest.permission.WRITE_EXTERNAL_STORAGE,
1324
                Manifest.permission.READ_EXTERNAL_STORAGE,
1325
                Manifest.permission.CAMERA
1326
        );
1327
    }
1328
1329
    private void openImageChooserActivity() {
1330
        new MaterialDialog.Builder(this).items(R.array.photo).positiveText("取消")
1331
                .onPositive(new MaterialDialog.SingleButtonCallback() {
1332
                    @Override
1333
                    public void onClick(@NonNull MaterialDialog dialog, @NonNull DialogAction which) {
1334
                        if (mOpenFileWebChromeClient.mFilePathCallbacks != null) {
1335
                            mOpenFileWebChromeClient.mFilePathCallbacks.onReceiveValue(null);
1336
                            mOpenFileWebChromeClient.mFilePathCallbacks = null;
1337
                        }
1338
1339
                        if (mOpenFileWebChromeClient.mFilePathCallback != null) {
1340
                            mOpenFileWebChromeClient.mFilePathCallback.onReceiveValue(null);
1341
                            mOpenFileWebChromeClient.mFilePathCallback = null;
1342
                        }
1343
                        dialog.dismiss();
1344
                    }
1345
                }).cancelable(false)
1346
                .canceledOnTouchOutside(false).itemsCallback(new MaterialDialog.ListCallback() {
1347
            @Override
1348
            public void onSelection(MaterialDialog dialog, View itemView, int position, CharSequence text) {
1349
                if (position == 0){
1350
                    takeCamera();
1351
                } else if (position == 1) {
1352
                    takePhoto();
1353
                }
1354
            }
1355
        }).show();
1356
    }
1357
1358
    // 选择图片
1359
    private void takePhoto() {
1360
        Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
1361
        intent.addCategory(Intent.CATEGORY_OPENABLE);
1362
        intent.setType("image/*");
1363
        startActivityForResult(Intent.createChooser(intent, "Image Choose"), FILE_CHOOSER_RESULT_CODE);
1364
    }
1365
1366
    // 拍照
1367
    private void takeCamera() {
1368
        Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
1369
        if (ImageUitl.hasSdcard()) {
1370
            String fileName = "android" + System.currentTimeMillis() / 1000 + ".jpg";
1371
            cameraFilePath = ImageUitl.getPath(Environment.getExternalStorageDirectory() + "/" + "cdz") + "/" + fileName;
1372
            File imageFile = ImageUitl.getFile(cameraFilePath);
1373
            Uri uri = parseUri(imageFile);
1374
            intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);
1375
            try{
1376
                startActivityForResult(intent, FILE_CAMERA_RESULT_CODE);
1377
            } catch (Exception e) {
1378
                e.printStackTrace();
1379
            }
1380
1381
        }
1382
    }
1383
1384
    private Uri parseUri(File cameraFile) {
1385
        Uri imageUri;
1386
        String authority = getPackageName() + ".provider";
1387
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
1388
            //通过FileProvider创建一个content类型的Uri
1389
            imageUri = FileProvider.getUriForFile(getApplicationContext(), authority, cameraFile);
1390
        } else {
1391
            imageUri = Uri.fromFile(cameraFile);
1392
        }
1393
        return imageUri;
1394
    }
1395
1299 1396
    public class MyWebViewClient extends WebViewClient {
1300 1397
        @Override
1301 1398
        public void onPageStarted(WebView view, String url, Bitmap favicon) {
@ -1346,38 +1443,68 @@ public class MyWebViewActivity extends Activity implements PlatformActionListene
1346 1443
    }
1347 1444
1348 1445
    @Override
1349
    public void onActivityResult(int requestCode, int resultCode, Intent intent) {
1350
        if (requestCode == OpenFileWebChromeClient.REQUEST_FILE_PICKER) {
1446
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
1447
        super.onActivityResult(requestCode, resultCode, data);
1448
        if (null == mOpenFileWebChromeClient.mFilePathCallback && null == mOpenFileWebChromeClient.mFilePathCallbacks) return;
1449
        if (resultCode != RESULT_OK) {
1450
            if (mOpenFileWebChromeClient.mFilePathCallbacks != null) {
1451
                mOpenFileWebChromeClient.mFilePathCallbacks.onReceiveValue(null);
1452
                mOpenFileWebChromeClient.mFilePathCallbacks = null;
1453
            }
1454
1351 1455
            if (mOpenFileWebChromeClient.mFilePathCallback != null) {
1352
                Uri result = intent == null || resultCode != Activity.RESULT_OK ? null
1353
                        : intent.getData();
1354
                if (result != null) {
1355
                    String path = MediaUtility.getPath(getApplicationContext(),
1356
                            result);
1357
                    Uri uri = Uri.fromFile(new File(path));
1358
                    mOpenFileWebChromeClient.mFilePathCallback
1359
                            .onReceiveValue(uri);
1360
                } else {
1361
                    mOpenFileWebChromeClient.mFilePathCallback
1362
                            .onReceiveValue(null);
1363
                }
1456
                mOpenFileWebChromeClient.mFilePathCallback.onReceiveValue(null);
1457
                mOpenFileWebChromeClient.mFilePathCallback = null;
1364 1458
            }
1459
            return;
1460
        }
1461
1462
        Uri result = null;
1463
        if (requestCode == FILE_CAMERA_RESULT_CODE) {
1464
            if (null != data && null != data.getData()) {
1465
                result = data.getData();
1466
            }
1467
            if (result == null && ImageUitl.hasFile(cameraFilePath)) {
1468
                result = Uri.fromFile(new File(cameraFilePath));
1469
            }
1470
1365 1471
            if (mOpenFileWebChromeClient.mFilePathCallbacks != null) {
1366
                Uri result = intent == null || resultCode != Activity.RESULT_OK ? null
1367
                        : intent.getData();
1368
                if (result != null) {
1369
                    String path = MediaUtility.getPath(getApplicationContext(),
1370
                            result);
1371
                    Uri uri = Uri.fromFile(new File(path));
1372
                    mOpenFileWebChromeClient.mFilePathCallbacks
1373
                            .onReceiveValue(new Uri[]{uri});
1374
                } else {
1375
                    mOpenFileWebChromeClient.mFilePathCallbacks
1376
                            .onReceiveValue(null);
1377
                }
1472
                mOpenFileWebChromeClient.mFilePathCallbacks.onReceiveValue(new Uri[]{result});
1473
                mOpenFileWebChromeClient.mFilePathCallbacks = null;
1474
            } else if (mOpenFileWebChromeClient.mFilePathCallback != null) {
1475
                mOpenFileWebChromeClient.mFilePathCallback.onReceiveValue(result);
1476
                mOpenFileWebChromeClient.mFilePathCallback = null;
1477
            }
1478
        } else if (requestCode == FILE_CHOOSER_RESULT_CODE) {
1479
            if (data != null) {
1480
                result = data.getData();
1481
            }
1482
            if (mOpenFileWebChromeClient.mFilePathCallbacks != null) {
1483
                onActivityResultCallbacks(data);
1484
            } else if (mOpenFileWebChromeClient.mFilePathCallback != null) {
1485
                mOpenFileWebChromeClient.mFilePathCallback.onReceiveValue(result);
1486
                mOpenFileWebChromeClient.mFilePathCallback = null;
1378 1487
            }
1488
        }
1489
    }
1379 1490
1380
            mOpenFileWebChromeClient.mFilePathCallback = null;
1491
    @TargetApi(Build.VERSION_CODES.LOLLIPOP)
1492
    private void onActivityResultCallbacks(Intent intent) {
1493
        Uri[] results = null;
1494
        if (intent != null) {
1495
            String dataString = intent.getDataString();
1496
            ClipData clipData = intent.getClipData();
1497
            if (clipData != null) {
1498
                results = new Uri[clipData.getItemCount()];
1499
                for (int i=0;i<clipData.getItemCount();i++) {
1500
                    ClipData.Item item = clipData.getItemAt(i);
1501
                    results[i] = item.getUri();
1502
                }
1503
            }
1504
            if (dataString != null) {
1505
                results = new Uri[] {Uri.parse(dataString)};
1506
            }
1507
            mOpenFileWebChromeClient.mFilePathCallbacks.onReceiveValue(results);
1381 1508
            mOpenFileWebChromeClient.mFilePathCallbacks = null;
1382 1509
        }
1383 1510
    }

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

Watchers - Gogs: Go Git Service

Watchers