private static final int CHOOSE_REQUEST_CODE = 0x9001;
private ValueCallback<Uri> uploadFile;//定义接受返回值
private ValueCallback<Uri[]> uploadFiles;
public void initView() {
mPresenter = new WebPresenter();
mPresenter.attachView(this);
webView = findViewById(R.id.webView);
ivError = findViewById(R.id.ivError);
webView.setWebContentsDebuggingEnabled(true);
//订阅这个EventBus
EventBus.getDefault().register(this);
/**
* js像Android发送消息
* */
webView.addJavascriptInterface(new WebAppInterface(this), "Android");
//判断通知权限是否开启
if (!NotificationManagerCompat.from(this).areNotificationsEnabled()) {
//跳转开启通知页面
jumpNotificationSetting();
}
//相册如果未授权
if (ContextCompat.checkSelfPermission(WebActivity.this, WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
//发起授权询问
ActivityCompat.requestPermissions(WebActivity.this, new String[]{WRITE_EXTERNAL_STORAGE}, 1);
}
// Intent intent = new Intent(Intent.ACTION_PICK,
// android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
// startActivityForResult(intent, 11);
// webView加载web文件
// webView.loadUrl(SharedPreferencesUtil.getString("url"));
webView.setWebContentsDebuggingEnabled(true);
WebSettings settings = webView.getSettings();
// 不使用缓存:
settings.setCacheMode(WebSettings.LOAD_NO_CACHE);
// 启用支持javaScript
settings.setJavaScriptEnabled(true);
// 自動播放
settings.setMediaPlaybackRequiresUserGesture(false);
// 开启支持H5
settings.setDomStorageEnabled(true); // 开启支持H5
//设置webview支持javascript
settings.setJavaScriptEnabled(true);
//增加 设置脚本是否允许自动打开弹窗
settings.setJavaScriptCanOpenWindowsAutomatically(true);
//支持自动加载图片
settings.setLoadsImagesAutomatically(true);
//设置webview推荐使用的窗口,使html界面自适应屏幕
settings.setUseWideViewPort(true);
settings.setLoadWithOverviewMode(true);
//设置webview保存表单数据
settings.setSaveFormData(true);
//设置webview保存密码
settings.setSavePassword(true);
// int mDensity = getResources().getDisplayMetrics().densityDpi;
// if (mDensity == 120) {
// settings.setDefaultZoom(WebSettings.ZoomDensity.CLOSE);
// } else if (mDensity == 160) {
// settings.setDefaultZoom(WebSettings.ZoomDensity.MEDIUM);
// } else if (mDensity == 240) {
// settings.setDefaultZoom(WebSettings.ZoomDensity.FAR);
// }
//支持缩放
settings.setSupportZoom(true);
settings.setSupportMultipleWindows(true);
//设置APP可以缓存
settings.setAppCacheEnabled(true);
settings.setDatabaseEnabled(true);
//返回上个界面不刷新 允许本地缓存
settings.setDomStorageEnabled(true);
//增加 设置缓存LOAD_DEFAULT LOAD_CACHE_ONLY,LOAD_NO_CACHE
settings.setCacheMode(WebSettings.LOAD_DEFAULT);
// 设置可以访问文件
settings.setAllowFileAccess(true);
//不支持放大缩小
settings.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.SINGLE_COLUMN);
//不支持放大缩小
settings.setDisplayZoomControls(false);
//增加 设置编码格式
settings.setDefaultTextEncodingName("utf-8");
webView.setLongClickable(true);
webView.setScrollbarFadingEnabled(true);
webView.setScrollBarStyle(View.SCROLLBARS_INSIDE_OVERLAY);
webView.setDrawingCacheEnabled(true);
// 覆盖webview默认通过第三方或者系统浏览器打开网页的行为,使得网页在webview中打开
webView.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
//返回值为true,在webview中打开,返回值为false在第三方或者系统浏览器打开网页
view.loadUrl(url);
return false;
}
@Override
public void onReceivedSslError(WebView view, SslErrorHandler handler, android.net.http.SslError error) {
// 重写此方法可以让webview处理https请求
handler.proceed();
}
});
// 显示进度,出现一个进度窗口
webView.setWebChromeClient(new WebChromeClient() {
@Override
public void onProgressChanged(WebView view, int newProgress) {
//newProgress 1-100之间的整数
try {
if (newProgress == 100) {
// 网页加载完毕,关闭progressDialog
CommonMvpActivity.dismiss();
} else {
//网页正在加载,打开progressDialog
}
} catch (Exception e) {
Log.e("WebUtils-----------", "");
}
}
/**
* Android 5.0
* @param webView
* @param filePathCallback
* @param fileChooserParams
* @return
*/
// For Android >= 5.0
@Override
public boolean onShowFileChooser(WebView webView,
ValueCallback<Uri[]> filePathCallback,
WebChromeClient.FileChooserParams fileChooserParams) {
uploadFiles = filePathCallback;
openFileChooseProcess();
return true;
}
private void openFileChooseProcess() {
// 文件夹
// Intent i = new Intent(Intent.ACTION_GET_CONTENT);
// i.addCategory(Intent.CATEGORY_OPENABLE);
// i.setType("image/*");
// startActivityForResult(Intent.createChooser(i, "Choose"), CHOOSE_REQUEST_CODE);
// 相册
Intent intent = new Intent(Intent.ACTION_PICK,
android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(intent, CHOOSE_REQUEST_CODE);
// // 相机
// Intent intent = new Intent("android.media.action.IMAGE_CAPTURE");
// startActivityForResult(intent, CHOOSE_REQUEST_CODE);
}
});
webView.setWebViewClient(new WebViewClient() {
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
}
});
}
public void onActivityResult(int requestCode, int resultCode, Intent data) {
// LogCat.d("requestCode===",requestCode+"====");
super.onActivityResult(requestCode, resultCode, data);
if (resultCode == Activity.RESULT_OK) {
switch (requestCode) {
case CHOOSE_REQUEST_CODE:
if (null != uploadFile) {
Uri result = data == null || resultCode != Activity.RESULT_OK ? null
: data.getData();
uploadFile.onReceiveValue(result);
uploadFile = null;
}
if (null != uploadFiles) {
Uri result = data == null || resultCode != Activity.RESULT_OK ? null
: data.getData();
uploadFiles.onReceiveValue(new Uri[]{result});
uploadFiles = null;
}
break;
default:
break;
}
} else if (resultCode == Activity.RESULT_CANCELED) {
if (null != uploadFile) {
uploadFile.onReceiveValue(null);
uploadFile = null;
}
if (null != uploadFiles) {
uploadFiles.onReceiveValue(null);
uploadFiles = null;
}
}
}
网友评论