Ver Código Fonte

h5页面拍照问题修改

huyuguo 5 anos atrás
pai
commit
84eab5f732

+ 2 - 0
app/build.gradle

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

+ 1 - 0
app/gradle.properties

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

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

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

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


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

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

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

1
package com.electric.chargingpile.activity;
1
package com.electric.chargingpile.activity;
2
2
3
import android.Manifest;
3
import android.annotation.SuppressLint;
4
import android.annotation.SuppressLint;
4
import android.annotation.TargetApi;
5
import android.annotation.TargetApi;
5
import android.app.Activity;
6
import android.app.Activity;
6
import android.app.AlertDialog;
7
import android.app.AlertDialog;
7
import android.content.ActivityNotFoundException;
8
import android.content.ActivityNotFoundException;
9
import android.content.ClipData;
8
import android.content.Context;
10
import android.content.Context;
9
import android.content.DialogInterface;
11
import android.content.DialogInterface;
10
import android.content.Intent;
12
import android.content.Intent;
14
import android.net.http.SslError;
16
import android.net.http.SslError;
15
import android.os.Build;
17
import android.os.Build;
16
import android.os.Bundle;
18
import android.os.Bundle;
19
import android.os.Environment;
20
import android.provider.MediaStore;
21
import android.support.annotation.NonNull;
22
import android.support.v4.content.FileProvider;
17
import android.util.Log;
23
import android.util.Log;
18
import android.view.KeyEvent;
24
import android.view.KeyEvent;
19
import android.view.View;
25
import android.view.View;
23
import android.webkit.ValueCallback;
29
import android.webkit.ValueCallback;
24
import android.webkit.WebBackForwardList;
30
import android.webkit.WebBackForwardList;
25
import android.webkit.WebChromeClient;
31
import android.webkit.WebChromeClient;
32
import android.webkit.WebSettings;
26
import android.webkit.WebView;
33
import android.webkit.WebView;
27
import android.webkit.WebViewClient;
34
import android.webkit.WebViewClient;
28
import android.widget.ImageView;
35
import android.widget.ImageView;
30
import android.widget.TextView;
37
import android.widget.TextView;
31
import android.widget.Toast;
38
import android.widget.Toast;
32
39
40
import com.afollestad.materialdialogs.DialogAction;
41
import com.afollestad.materialdialogs.MaterialDialog;
33
import com.electric.chargingpile.R;
42
import com.electric.chargingpile.R;
34
import com.electric.chargingpile.application.MainApplication;
43
import com.electric.chargingpile.application.MainApplication;
35
import com.electric.chargingpile.data.User;
44
import com.electric.chargingpile.data.User;
36
import com.electric.chargingpile.manager.ProfileManager;
45
import com.electric.chargingpile.manager.ProfileManager;
37
import com.electric.chargingpile.util.DES3;
46
import com.electric.chargingpile.util.DES3;
47
import com.electric.chargingpile.util.ImageUitl;
38
import com.electric.chargingpile.util.JsonUtils;
48
import com.electric.chargingpile.util.JsonUtils;
39
import com.electric.chargingpile.util.MediaUtility;
49
import com.electric.chargingpile.util.MediaUtility;
40
import com.electric.chargingpile.util.ToastUtil;
50
import com.electric.chargingpile.util.ToastUtil;
48
import java.io.File;
58
import java.io.File;
49
import java.net.URLEncoder;
59
import java.net.URLEncoder;
50
import java.util.HashMap;
60
import java.util.HashMap;
61
import java.util.List;
51
import java.util.Map;
62
import java.util.Map;
52
63
53
import cn.sharesdk.framework.Platform;
64
import cn.sharesdk.framework.Platform;
57
import cn.sharesdk.wechat.friends.Wechat;
68
import cn.sharesdk.wechat.friends.Wechat;
58
import cn.sharesdk.wechat.moments.WechatMoments;
69
import cn.sharesdk.wechat.moments.WechatMoments;
59
import okhttp3.Call;
70
import okhttp3.Call;
71
import pub.devrel.easypermissions.AfterPermissionGranted;
72
import pub.devrel.easypermissions.EasyPermissions;
60
73
61
public class H5Activity extends Activity implements View.OnClickListener, PlatformActionListener {
74
public class H5Activity extends Activity implements View.OnClickListener, PlatformActionListener,EasyPermissions.PermissionCallbacks {
62
    private WebView webView;
75
    private WebView webView;
63
    private ImageView iv_back, iv_close;
76
    private ImageView iv_back, iv_close;
64
    private TextView txtTitle, tv_next;
77
    private TextView txtTitle, tv_next;
80
    private String mUrl;
93
    private String mUrl;
81
    private ProgressBar pbWebView;
94
    private ProgressBar pbWebView;
82
95
96
    private static final int RC_ALBUM_PERM = 127;
97
    private final static int FILE_CHOOSER_RESULT_CODE = 128;  // 图片
98
    private final static int FILE_CAMERA_RESULT_CODE = 129; // 拍照
99
    private String cameraFilePath;  // 拍照图片路径
100
83
101
84
    @SuppressLint("SetJavaScriptEnabled")
102
    @SuppressLint("SetJavaScriptEnabled")
85
    @Override
103
    @Override
171
        webView.getSettings().setSupportZoom(true);
189
        webView.getSettings().setSupportZoom(true);
172
        webView.getSettings().setBuiltInZoomControls(true);
190
        webView.getSettings().setBuiltInZoomControls(true);
173
        webView.getSettings().setJavaScriptEnabled(true);
191
        webView.getSettings().setJavaScriptEnabled(true);
192
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
193
            webView.getSettings().setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW);
194
        }
174
        if (tag.equals("6")) {
195
        if (tag.equals("6")) {
175
            Map<String, String> extraHeaders = new HashMap<String, String>();
196
            Map<String, String> extraHeaders = new HashMap<String, String>();
176
            extraHeaders.put("Authorization", "Bearer " + token);
197
            extraHeaders.put("Authorization", "Bearer " + token);
180
            webView.loadUrl(urlweb);
201
            webView.loadUrl(urlweb);
181
        }
202
        }
182
203
183
//        TelephonyManager tm = (TelephonyManager) this.getSystemService(TELEPHONY_SERVICE);
184
//        String imei = tm.getDeviceId();
185
//        String url = "http://123.57.6.131/zhannew/basic/web/index.php/test/index?deviceCode="+imei;
186
//        Log.e("tld_url===",url);
187
//
188
//        OkHttpUtils.get()
189
//                .url(url)
190
//                .build()
191
//                .execute(new StringCallback() {
192
//                    @Override
193
//                    public void onError(Call call, Exception e) {
194
//
195
//                    }
196
//
197
//                    @Override
198
//                    public void onResponse(String response) {
199
//                        String url = JsonUtils.getKeyResult(response,"url");
200
//                        Log.e("url===",url);
201
//                        String token = JsonUtils.getKeyResult(response,"token");
202
//                        Log.e("token===",token);
203
//                        Map<String,String> extraHeaders = new HashMap<String, String>();
204
//                        extraHeaders.put("Authorization", "Bearer "+token);
205
//                        extraHeaders.put("Content-Type", "application/html; charset=utf-8");
206
//                        webView.loadUrl(url,extraHeaders);
207
//                    }
208
//                });
209
//
210
211
//        String s = "http://open.wyqcd.com/TerminalDetails/TerminalDetails?deviceCode=869161024656860&mobile=18911900442&pileCode=12313132&thirdCode=20160804110219&sign=6248586650bf637ea5201213b5dc3ff0";
212
//        Map<String,String> extraHeaders = new HashMap<String, String>();
213
//        extraHeaders.put("Authorization", "Bearer iT4Kg5q_kAf4xRMLxwARa-sEfPpCNfD1McKDhdj7hIZlUzHxnpoEAxqqa9nKpJ0XjOF3PqLqP36eTDqX-xi9DYJ9a02cQYjWyCv7kds6QVcs_qvvDQ4fAMWkqD4O7Ibggxzorg4VB4GzmMAaNe4GKhn8zu3WFt49cNzhc7yn4b0G7fNHF_o2PIoD6UEEvysBwv0p10vezSkO7dvDK_3IxcLW9qevV0sF8ZVDqdeTZ5yd5fZS");
214
//        extraHeaders.put("Content-Type", "application/html; charset=utf-8");
215
//        webView.loadUrl(s,extraHeaders);
216
//        webView.loadUrl("http://cdz.evcharge.cc/zhannew/basic/web/index.php/userpile/index?user_id=42224&token=ssss");
217
        webView.getSettings().setDatabaseEnabled(true);
204
        webView.getSettings().setDatabaseEnabled(true);
218
        String dir = this.getApplicationContext().getDir("database", Context.MODE_PRIVATE).getPath();
205
        String dir = this.getApplicationContext().getDir("database", Context.MODE_PRIVATE).getPath();
219
206
221
        webView.getSettings().setGeolocationEnabled(true);
208
        webView.getSettings().setGeolocationEnabled(true);
222
        //设置定位的数据库路径
209
        //设置定位的数据库路径
223
        webView.getSettings().setGeolocationDatabasePath(dir);
210
        webView.getSettings().setGeolocationDatabasePath(dir);
224
//        webView.getSettings().setGeolocationEnabled(true);
225
        webView.setWebChromeClient(mOpenFileWebChromeClient);
211
        webView.setWebChromeClient(mOpenFileWebChromeClient);
226
212
227
//        webView.setWebChromeClient(((H5Activity) mContext).mOpenFileWebChromeClient);
228
229
        webView.getSettings().setDomStorageEnabled(true);
213
        webView.getSettings().setDomStorageEnabled(true);
230
        webView.addJavascriptInterface(this, "cdz");
214
        webView.addJavascriptInterface(this, "cdz");
231
215
1168
    public void onCancel(Platform platform, int i) {
1152
    public void onCancel(Platform platform, int i) {
1169
        Toast.makeText(getApplicationContext(), "分享已取消", Toast.LENGTH_SHORT).show();
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
    public class OpenFileWebChromeClient extends WebChromeClient {
1178
    public class OpenFileWebChromeClient extends WebChromeClient {
1177
        public static final int REQUEST_FILE_PICKER = 1;
1179
        public static final int REQUEST_FILE_PICKER = 1;
1208
        // Android < 3.0 调用这个方法
1210
        // Android < 3.0 调用这个方法
1209
        public void openFileChooser(ValueCallback<Uri> filePathCallback) {
1211
        public void openFileChooser(ValueCallback<Uri> filePathCallback) {
1210
            mFilePathCallback = filePathCallback;
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
        // 3.0 + 调用这个方法
1216
        // 3.0 + 调用这个方法
1220
        public void openFileChooser(ValueCallback filePathCallback,
1217
        public void openFileChooser(ValueCallback filePathCallback,
1221
                                    String acceptType) {
1218
                                    String acceptType) {
1222
            mFilePathCallback = filePathCallback;
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
        // / js上传文件的<input type="file" name="fileField" id="fileField" />事件捕获
1223
        // / js上传文件的<input type="file" name="fileField" id="fileField" />事件捕获
1233
        public void openFileChooser(ValueCallback<Uri> filePathCallback,
1225
        public void openFileChooser(ValueCallback<Uri> filePathCallback,
1234
                                    String acceptType, String capture) {
1226
                                    String acceptType, String capture) {
1235
            mFilePathCallback = filePathCallback;
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
            mFilePathCallbacks = filePathCallback;
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
            return true;
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
    @Override
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
            if (mOpenFileWebChromeClient.mFilePathCallback != null) {
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
            if (mOpenFileWebChromeClient.mFilePathCallbacks != null) {
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
            mOpenFileWebChromeClient.mFilePathCallbacks = null;
1391
            mOpenFileWebChromeClient.mFilePathCallbacks = null;
1291
        }
1392
        }
1292
    }
1393
    }

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

1
package com.electric.chargingpile.activity;
1
package com.electric.chargingpile.activity;
2
2
3
import android.Manifest;
3
import android.annotation.SuppressLint;
4
import android.annotation.SuppressLint;
5
import android.annotation.TargetApi;
4
import android.app.Activity;
6
import android.app.Activity;
5
import android.app.AlertDialog;
7
import android.app.AlertDialog;
8
import android.content.ClipData;
6
import android.content.Context;
9
import android.content.Context;
7
import android.content.DialogInterface;
10
import android.content.DialogInterface;
8
import android.content.Intent;
11
import android.content.Intent;
9
import android.net.Uri;
12
import android.net.Uri;
10
import android.net.http.SslError;
13
import android.net.http.SslError;
14
import android.os.Build;
11
import android.os.Bundle;
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
import android.util.Log;
20
import android.util.Log;
13
import android.view.KeyEvent;
21
import android.view.KeyEvent;
14
import android.view.View;
22
import android.view.View;
23
import android.webkit.GeolocationPermissions;
15
import android.webkit.JavascriptInterface;
24
import android.webkit.JavascriptInterface;
16
import android.webkit.SslErrorHandler;
25
import android.webkit.SslErrorHandler;
26
import android.webkit.ValueCallback;
17
import android.webkit.WebBackForwardList;
27
import android.webkit.WebBackForwardList;
18
import android.webkit.WebChromeClient;
28
import android.webkit.WebChromeClient;
29
import android.webkit.WebSettings;
19
import android.webkit.WebView;
30
import android.webkit.WebView;
20
import android.webkit.WebViewClient;
31
import android.webkit.WebViewClient;
21
import android.widget.ImageView;
32
import android.widget.ImageView;
22
import android.widget.TextView;
33
import android.widget.TextView;
23
import android.widget.Toast;
34
import android.widget.Toast;
24
35
36
import com.afollestad.materialdialogs.DialogAction;
37
import com.afollestad.materialdialogs.MaterialDialog;
25
import com.electric.chargingpile.R;
38
import com.electric.chargingpile.R;
26
import com.electric.chargingpile.application.MainApplication;
39
import com.electric.chargingpile.application.MainApplication;
27
import com.electric.chargingpile.util.DES3;
40
import com.electric.chargingpile.util.DES3;
41
import com.electric.chargingpile.util.ImageUitl;
28
import com.electric.chargingpile.util.JsonUtils;
42
import com.electric.chargingpile.util.JsonUtils;
29
import com.electric.chargingpile.util.OpenFileWebChromeClient;
30
import com.umeng.analytics.MobclickAgent;
43
import com.umeng.analytics.MobclickAgent;
31
44
45
import java.io.File;
32
import java.net.URLEncoder;
46
import java.net.URLEncoder;
33
import java.util.HashMap;
47
import java.util.HashMap;
48
import java.util.List;
34
49
35
import cn.sharesdk.framework.Platform;
50
import cn.sharesdk.framework.Platform;
36
import cn.sharesdk.framework.PlatformActionListener;
51
import cn.sharesdk.framework.PlatformActionListener;
38
import cn.sharesdk.onekeyshare.OnekeyShare;
53
import cn.sharesdk.onekeyshare.OnekeyShare;
39
import cn.sharesdk.wechat.friends.Wechat;
54
import cn.sharesdk.wechat.friends.Wechat;
40
import cn.sharesdk.wechat.moments.WechatMoments;
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
    private WebView webView;
60
    private WebView webView;
44
    private ImageView iv_back, iv_close;
61
    private ImageView iv_back, iv_close;
45
    private TextView txtTitle, tv_next;
62
    private TextView txtTitle, tv_next;
50
    private String index = "0";
67
    private String index = "0";
51
    public static String ok = "";
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
    @SuppressLint("SetJavaScriptEnabled")
75
    @SuppressLint("SetJavaScriptEnabled")
54
    @Override
76
    @Override
55
    protected void onCreate(Bundle savedInstanceState) {
77
    protected void onCreate(Bundle savedInstanceState) {
87
        tv_next = (TextView) findViewById(R.id.tv_next);
109
        tv_next = (TextView) findViewById(R.id.tv_next);
88
        tv_next.setOnClickListener(this);
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
        webView.loadUrl(urlweb);
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
        webView.getSettings().setSupportZoom(true);
113
        webView.getSettings().setSupportZoom(true);
141
        webView.getSettings().setBuiltInZoomControls(true);
114
        webView.getSettings().setBuiltInZoomControls(true);
142
        webView.getSettings().setJavaScriptEnabled(true);
115
        webView.getSettings().setJavaScriptEnabled(true);
143
        webView.getSettings().setDatabaseEnabled(true);
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
        String dir = this.getApplicationContext().getDir("database", Context.MODE_PRIVATE).getPath();
120
        String dir = this.getApplicationContext().getDir("database", Context.MODE_PRIVATE).getPath();
145
121
146
        //启用地理定位
122
        //启用地理定位
150
//        webView.getSettings().setGeolocationEnabled(true);
126
//        webView.getSettings().setGeolocationEnabled(true);
151
        webView.setWebChromeClient(mOpenFileWebChromeClient);
127
        webView.setWebChromeClient(mOpenFileWebChromeClient);
152
        webView.addJavascriptInterface(this, "cdz");
128
        webView.addJavascriptInterface(this, "cdz");
153
154
//        webView.setWebChromeClient(((H5Activity) mContext).mOpenFileWebChromeClient);
155
156
        webView.getSettings().setDomStorageEnabled(true);
129
        webView.getSettings().setDomStorageEnabled(true);
157
130
158
        webView.setWebViewClient(new WebViewClient() {
131
        webView.setWebViewClient(new WebViewClient() {
734
        super.onPause();
707
        super.onPause();
735
        MobclickAgent.onPause(this);
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
                            } else {
5548
                            } else {
5549
                                url = MainApplication.list_addetail.get(result).getUrl() + "?cdzshareid=" + MainApplication.list_addetail.get(result).getId();
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
//                                intent_text,intent_icon,intent_title,intent_url;
5554
//                                intent_text,intent_icon,intent_title,intent_url;
5553
                            intent145.putExtra("url", url);
5555
                            intent145.putExtra("url", url);

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

16
import android.net.http.SslError;
16
import android.net.http.SslError;
17
import android.os.Build;
17
import android.os.Build;
18
import android.os.Bundle;
18
import android.os.Bundle;
19
import android.os.Environment;
19
import android.os.Handler;
20
import android.os.Handler;
21
import android.provider.MediaStore;
22
import android.support.annotation.NonNull;
23
import android.support.v4.content.FileProvider;
20
import android.util.Log;
24
import android.util.Log;
21
import android.view.KeyEvent;
25
import android.view.KeyEvent;
22
import android.view.View;
26
import android.view.View;
27
import android.webkit.ValueCallback;
31
import android.webkit.ValueCallback;
28
import android.webkit.WebBackForwardList;
32
import android.webkit.WebBackForwardList;
29
import android.webkit.WebChromeClient;
33
import android.webkit.WebChromeClient;
34
import android.webkit.WebSettings;
30
import android.webkit.WebView;
35
import android.webkit.WebView;
31
import android.webkit.WebViewClient;
36
import android.webkit.WebViewClient;
32
import android.widget.ImageView;
37
import android.widget.ImageView;
35
import android.widget.TextView;
40
import android.widget.TextView;
36
import android.widget.Toast;
41
import android.widget.Toast;
37
42
43
import com.afollestad.materialdialogs.DialogAction;
44
import com.afollestad.materialdialogs.MaterialDialog;
38
import com.blankj.utilcode.util.LogUtils;
45
import com.blankj.utilcode.util.LogUtils;
39
import com.electric.chargingpile.R;
46
import com.electric.chargingpile.R;
40
import com.electric.chargingpile.application.MainApplication;
47
import com.electric.chargingpile.application.MainApplication;
43
import com.electric.chargingpile.manager.ProfileManager;
50
import com.electric.chargingpile.manager.ProfileManager;
44
import com.electric.chargingpile.util.BarColorUtil;
51
import com.electric.chargingpile.util.BarColorUtil;
45
import com.electric.chargingpile.util.DES3;
52
import com.electric.chargingpile.util.DES3;
53
import com.electric.chargingpile.util.ImageUitl;
46
import com.electric.chargingpile.util.JsonUtils;
54
import com.electric.chargingpile.util.JsonUtils;
47
import com.electric.chargingpile.util.MediaUtility;
55
import com.electric.chargingpile.util.MediaUtility;
48
import com.electric.chargingpile.util.ToastUtil;
56
import com.electric.chargingpile.util.ToastUtil;
93
    private android.view.animation.Animation animation;
101
    private android.view.animation.Animation animation;
94
    private static final int RC_CALL_PERM = 123;
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
    @Override
109
    @Override
97
    protected void onCreate(Bundle savedInstanceState) {
110
    protected void onCreate(Bundle savedInstanceState) {
98
        super.onCreate(savedInstanceState);
111
        super.onCreate(savedInstanceState);
140
        webView.getSettings().setGeolocationDatabasePath(dir);
153
        webView.getSettings().setGeolocationDatabasePath(dir);
141
        webView.setWebChromeClient(mOpenFileWebChromeClient);
154
        webView.setWebChromeClient(mOpenFileWebChromeClient);
142
        webView.getSettings().setDomStorageEnabled(true);
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
//        webView.getSettings().setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);
159
//        webView.getSettings().setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);
144
        webView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true); //支持通过JS打开新窗口
160
        webView.getSettings().setJavaScriptCanOpenWindowsAutomatically(true); //支持通过JS打开新窗口
145
        webView.addJavascriptInterface(this, "cdz");
161
        webView.addJavascriptInterface(this, "cdz");
1199
    }
1215
    }
1200
1216
1201
    @Override
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
    public void onPermissionsGranted(int requestCode, List<String> perms) {
1228
    public void onPermissionsGranted(int requestCode, List<String> perms) {
1203
1229
1204
    }
1230
    }
1205
1231
1206
    @Override
1232
    @Override
1207
    public void onPermissionsDenied(int requestCode, List<String> perms) {
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
    private boolean hasCallPhonePermission() {
1244
    private boolean hasCallPhonePermission() {
1250
        // Android < 3.0 调用这个方法
1280
        // Android < 3.0 调用这个方法
1251
        public void openFileChooser(ValueCallback<Uri> filePathCallback) {
1281
        public void openFileChooser(ValueCallback<Uri> filePathCallback) {
1252
            mFilePathCallback = filePathCallback;
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
        // 3.0 + 调用这个方法
1286
        // 3.0 + 调用这个方法
1262
        public void openFileChooser(ValueCallback filePathCallback,
1263
                                    String acceptType) {
1287
        public void openFileChooser(ValueCallback filePathCallback, String acceptType) {
1264
            mFilePathCallback = filePathCallback;
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
        // / js上传文件的<input type="file" name="fileField" id="fileField" />事件捕获
1292
        // / js上传文件的<input type="file" name="fileField" id="fileField" />事件捕获
1274
        // Android > 4.1.1 调用这个方法
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
            mFilePathCallback = filePathCallback;
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
            mFilePathCallbacks = filePathCallback;
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
            return true;
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
    public class MyWebViewClient extends WebViewClient {
1396
    public class MyWebViewClient extends WebViewClient {
1300
        @Override
1397
        @Override
1301
        public void onPageStarted(WebView view, String url, Bitmap favicon) {
1398
        public void onPageStarted(WebView view, String url, Bitmap favicon) {
1346
    }
1443
    }
1347
1444
1348
    @Override
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
            if (mOpenFileWebChromeClient.mFilePathCallback != null) {
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
            if (mOpenFileWebChromeClient.mFilePathCallbacks != null) {
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
            mOpenFileWebChromeClient.mFilePathCallbacks = null;
1508
            mOpenFileWebChromeClient.mFilePathCallbacks = null;
1382
        }
1509
        }
1383
    }
1510
    }

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

7
import android.graphics.BitmapFactory;
7
import android.graphics.BitmapFactory;
8
import android.graphics.Matrix;
8
import android.graphics.Matrix;
9
import android.net.Uri;
9
import android.net.Uri;
10
import android.os.Environment;
10
import android.util.Log;
11
import android.util.Log;
11
12
12
import java.io.ByteArrayInputStream;
13
import java.io.ByteArrayInputStream;
13
import java.io.ByteArrayOutputStream;
14
import java.io.ByteArrayOutputStream;
14
import java.io.File;
15
import java.io.File;
16
import java.io.IOException;
15
import java.io.InputStream;
17
import java.io.InputStream;
16
18
17
/**
19
/**
396
        bitmap = compressImage(bitmap, 100);//质量压缩
398
        bitmap = compressImage(bitmap, 100);//质量压缩
397
        return bitmap;
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
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
        <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>
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
        <item>"test"</item>
14
        <item>"test"</item>
15
    </string-array>
15
    </string-array>
16
    <string-array name="photo">
17
        <item>拍照</item>
18
        <item>照片图库</item>
19
    </string-array>
16
20
17
    <string-array name="color_arr">
21
    <string-array name="color_arr">
18
        <item>@color/lvse</item>
22
        <item>@color/lvse</item>