1. 先使用 android 打开webview
创建 webview 控件,对其进行设置
webView = (WebView) findViewById(R.id.webview);
webSettings = webView.getSettings();
webSettings.setAppCacheEnabled(true);
webSettings.setCacheMode(webSettings.LOAD_NO_CACHE);
webSettings.setJavaScriptEnabled(true);
webSettings.setDomStorageEnabled(true);
webSettings.setBuiltInZoomControls(false);
webSettings.setLoadWithOverviewMode(true);
webSettings.setAllowFileAccess(true);
//处理http和https混合的问题
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
webSettings.setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW);
} else {
webSettings.setMixedContentMode(WebSettings.LOAD_NORMAL);
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
// 允许javascript出错
try {
Method method = Class.forName("android.webkit.WebView").
getMethod("setWebContentsDebuggingEnabled", Boolean.TYPE);
if (method != null) {
method.setAccessible(true);
method.invoke(null, true);
}
} catch (Exception e) {
// do nothing
}
}
webView.setFocusable(true);// 自选,非必要
webView.setDrawingCacheEnabled(true); // 自选,非必要
webView.setWebViewClient(new PQClient());
webView.setWebChromeClient(new PQChromeClient());
2. webview设置 访问 相册方法
通过复写 WebChromeClient.onShowFileChooser
WebChromeClient.openFileChooser
来实现 打开系统图片资源
3.h5打开相册
辅助WebView处理图片上传操作【<input type=file> 文件上传标签】
4. 权限自动获取
activity 添加
@RuntimePermissions
主动获取权限
MainActivityPermissionsDispatcher.method_xWithPermissionCheck(this);
实现方法
@NeedsPermission({Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.CAMERA, Manifest.permission.INTERNET}) void method_x() { //使用权限 Toast.makeText(this, "已有权限", Toast.LENGTH_SHORT).show(); }
NeedsPermission 就是 本项目要获取的权限
使用到的第三方库:
permissionsdispatcher
避坑:
发现 当点击取消的时候,下次再不再调用打开文件的操作。
原因就是上次的文件回调函数没有处理完成。
代码:
https://gitee.com/xjyylzh/h5openphotos.git
查找错误提示,使用浏览器打开
找到在项目目录下app/build/reports/lint-results-release-fatal.html
文件