在項目開發過程當中,免不了要進行混合開發,也就是常見的web混合開發,記錄一下項目中經常使用的部分代碼。java
mWebView.setScrollBarStyle(View.SCROLLBARS_OUTSIDE_OVERLAY);
//WebView屬性設置!!!
WebSettings settings = mWebView.getSettings();
//設置加載js
settings.setJavaScriptEnabled(true);
settings.setAllowFileAccess(true);
settings.setCacheMode(WebSettings.LOAD_DEFAULT);
settings.setDomStorageEnabled(true);
settings.setUseWideViewPort(true);
settings.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.SINGLE_COLUMN);
settings.setLoadWithOverviewMode(true);
settings.setJavaScriptCanOpenWindowsAutomatically(true);
settings.setDatabaseEnabled(true);
//webview在安卓5.0以前默認容許其加載混合網絡協議內容
// 在安卓5.0以後,默認不容許加載http與https混合內容,須要設置webview容許其加載混合網絡協議內容
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
mWebView.getSettings().setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW);
}
複製代碼
mWebView.setWebChromeClient(new MyWebChromeClient());
mWebView.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
Log.i("網頁攔截中加載的url:", url);
view.loadUrl(url);
return super.shouldOverrideUrlLoading(view, url);
}
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
super.onPageStarted(view, url, favicon);
}
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
}
});
class MyWebChromeClient extends WebChromeClient {
@Override
public void onProgressChanged(WebView view, int newProgress) {
if (newProgress == 100) {
mProgressBar.setVisibility(View.GONE);
} else {
mProgressBar.setVisibility(View.VISIBLE);
mProgressBar.setProgress(newProgress);
}
}
@Override
public void onReceivedTitle(WebView view, String webtitle) {
super.onReceivedTitle(view, webtitle);
LogUtils.logi("網頁標題:" + webtitle);
if (!TextUtils.isEmpty(webtitle)) {
mTitle.setTitle(false, null, webtitle);
} else {
mTitle.setTitle(false, null, "提現");
}
}
//Android 5.0 及以上 必須重寫此方法
@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
@Override
public boolean onShowFileChooser(WebView webView, ValueCallback<Uri[]> filePathCallback, FileChooserParams fileChooserParams) {
boolean fromCamera = fileChooserParams.isCaptureEnabled();
String[] acceptTypes = fileChooserParams.getAcceptTypes();
if (acceptTypes != null && acceptTypes.length > 0) {
boolean isImage = false;
for (String acceptType : acceptTypes) {
if (acceptType.contains("image")) {
isImage = true;
break;
}
}
if (isImage) {//處理圖片
if (fromCamera) {//只處理拍照
if (captureImageFromCamera(WebViewActivity.this, imageUri)) {
WebViewActivity.this.filePathCallback = filePathCallback;//暫存,用於拍完照片後回調H5
return true;//返回true表示APP處理文件選擇
}
}
}
boolean isVideo = false;
for (String acceptType : acceptTypes) {
if (acceptType.contains("video")) {
isVideo = true;
break;
}
}
if (isVideo) {//處理視頻
if (fromCamera) {//只處理拍攝視頻
if (captureVideoFromCamera(WebViewActivity.this, imageUri)) {
WebViewActivity.this.filePathCallback = filePathCallback;//暫存,用於拍攝完視頻後回調H5
return true;//返回true表示APP處理文件選擇
}
}
}
}
return super.onShowFileChooser(webView, filePathCallback, fileChooserParams);
}
//Android 5.0 如下 必須重寫此方法
public void openFileChooser(final ValueCallback<Uri> uploadFile, String acceptType, String capture) {
LogUtils.loge("點擊文件的類型是:" + acceptType);
boolean fromCamera = !TextUtils.isEmpty(capture);
if (acceptType != null && acceptType.contains("video")) {//處理視頻
if (fromCamera) {//只處理拍攝視頻
if (captureVideoFromCamera(WebViewActivity.this, imageUri)) {
WebViewActivity.this.uploadFile = uploadFile;//暫存,用於拍攝完視頻後回調H5
return;
}
}
}
if (acceptType != null && acceptType.contains("image")) {//處理圖片
if (fromCamera) {//只處理拍照
if (captureImageFromCamera(WebViewActivity.this, imageUri)) {
WebViewActivity.this.uploadFile = uploadFile;//暫存,用於拍完照片後回調H5
}
}
}
}
}
複製代碼
//webview jsbridge
implementation 'com.github.wendux:WebViewJavascriptBridge:master-SNAPSHOT'
compile('com.github.gzu-liyujiang.AndroidPicker:WheelPicker:1.5.6') {
exclude group: 'com.android.support'
}
複製代碼
mWebView.registerHandler("testObjcCallback", (WVJBWebView.WVJBHandler) (data, callback) -> {
callback.onResult(data);
Log.d("wvjsblog", "Java Echo called with: " + data.toString());
//此到處理data回調的結果
});
複製代碼
/** * 下載文件監聽 跳轉瀏覽器下載 * * @param mWebView */
public static void addDownLoadListener(Activity activity, WVJBWebView mWebView) {
mWebView.setDownloadListener((url, userAgent, contentDisposition, mimetype, contentLength) -> {
if (!TextUtils.isEmpty(url)) {
downloadByBrowser(activity, url);
}
});
}
//跳轉到外部瀏覽器進行下載
public static void downloadByBrowser(Activity activity, String url) {
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.addCategory(Intent.CATEGORY_BROWSABLE);
intent.setData(Uri.parse(url));
activity.startActivity(intent);
}
複製代碼
/** * 加載的url歷史堆棧信息 * * @param loadHistoryUrls:url數組信息 * @param mWebView * @param activity * @param isMain:是否爲首頁的tab頁面 */
public static void receiverGoBack(ArrayList<String> loadHistoryUrls, WVJBWebView mWebView, Activity activity, boolean isMain, ImageView imageView) {
//過濾是否爲重定向後的連接
LogUtils.loge("網頁攔截中加載的url歷史堆棧信息:" + loadHistoryUrls.toString());
if (loadHistoryUrls.size() > 1 && !ConfigUtil.H5Pre.contains(loadHistoryUrls.get(loadHistoryUrls.size() - 1))) {
if (loadHistoryUrls.size() > 2) {
//移除加載棧中的最後兩個連接
loadHistoryUrls.remove(loadHistoryUrls.get(loadHistoryUrls.size() - 1));
loadHistoryUrls.remove(loadHistoryUrls.get(loadHistoryUrls.size() - 1));
}
if (loadHistoryUrls.size() > 1) {
//移除加載棧中的最後一個連接
loadHistoryUrls.remove(loadHistoryUrls.get(loadHistoryUrls.size() - 1));
}
LogUtils.loge("攔截中後退的url歷史記錄" + loadHistoryUrls.toString());
//加載重定向以前的頁
if (isMain) {
if (loadHistoryUrls.size() == 1) {
imageView.setVisibility(View.INVISIBLE);
}
}
mWebView.loadUrl(loadHistoryUrls.get(loadHistoryUrls.size() - 1));
} else {
activity.finish();
}
}
public static void onPressGoBack(ArrayList<String> loadHistoryUrls, WVJBWebView mWebView, ImageView imageView, Activity activity) {
//過濾是否爲重定向後的連接
LogUtils.loge("網頁攔截中加載的url歷史堆棧信息:" + loadHistoryUrls.toString());
if (loadHistoryUrls.size() > 1 && !ConfigUtil.H5Pre.contains(loadHistoryUrls.get(loadHistoryUrls.size() - 1))) {
if (loadHistoryUrls.size() > 2) {
//移除加載棧中的最後兩個連接
loadHistoryUrls.remove(loadHistoryUrls.get(loadHistoryUrls.size() - 1));
loadHistoryUrls.remove(loadHistoryUrls.get(loadHistoryUrls.size() - 1));
}
if (loadHistoryUrls.size() > 1) {
//移除加載棧中的最後一個連接
loadHistoryUrls.remove(loadHistoryUrls.get(loadHistoryUrls.size() - 1));
}
LogUtils.loge("攔截中後退的url歷史記錄" + loadHistoryUrls.toString());
//加載重定向以前的頁
if (loadHistoryUrls.size() == 1) {
imageView.setVisibility(View.INVISIBLE);
}
mWebView.loadUrl(loadHistoryUrls.get(loadHistoryUrls.size() - 1));
} else {
if ((System.currentTimeMillis() - exitTime) > 2000) {
ToastUtil.showToast("再按一次退出程序");
exitTime = System.currentTimeMillis();
} else {
activity.finish();
}
}
}
複製代碼
多的就不說了,附帶源碼部分 WebUtils.javaandroid
public class WebUtils {
public static UMShareListener umShareListener = new UMShareListener() {
@Override
public void onStart(SHARE_MEDIA share_media) {
}
@Override
public void onResult(SHARE_MEDIA platform) {
ToastUtil.showToast("分享成功");
}
@Override
public void onError(SHARE_MEDIA platform, Throwable t) {
ToastUtil.showToast("分享失敗");
}
@Override
public void onCancel(SHARE_MEDIA platform) {
}
};
private static long exitTime = 0;
public static void loadWebSetting(WVJBWebView mWebView) {
mWebView.setScrollBarStyle(View.SCROLLBARS_OUTSIDE_OVERLAY);
//WebView屬性設置!!!
WebSettings settings = mWebView.getSettings();
settings.setJavaScriptEnabled(true);
settings.setAllowFileAccess(true);
settings.setCacheMode(WebSettings.LOAD_DEFAULT);
settings.setDomStorageEnabled(true);
settings.setUseWideViewPort(true);
settings.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.SINGLE_COLUMN);
settings.setLoadWithOverviewMode(true);
settings.setJavaScriptCanOpenWindowsAutomatically(true);
settings.setDatabaseEnabled(true);
//webview在安卓5.0以前默認容許其加載混合網絡協議內容
// 在安卓5.0以後,默認不容許加載http與https混合內容,須要設置webview容許其加載混合網絡協議內容
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
mWebView.getSettings().setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW);
}
}
/** * webview中註冊的js方法 * * @param activity * @param mWebView */
public static void loadWebJsMethod(Activity activity, WVJBWebView mWebView) {
//分享功能
mWebView.registerHandler("testObjcCallback", (WVJBWebView.WVJBHandler) (data, callback) -> {
Log.d("wvjsblog", "Java Echo called with: " + data.toString());
callback.onResult(data);
Gson gson = new Gson();
if (data != null) {
ShareForWebBean bean1 = gson.fromJson(data.toString(), ShareForWebBean.class);
initShare(activity, bean1);
}
});
//返回首頁
mWebView.registerHandler("backHome", (WVJBWebView.WVJBHandler) (data, callback) -> {
Log.d("wvjsblog", "Java Echo called with: " + data.toString());
callback.onResult(data);
ARouter.getInstance().build(RouterUtil.INDEXMAIN).withInt("pageFlag", 1).navigation();
activity.finish();
});
//提現頁面
mWebView.registerHandler("profit", (WVJBWebView.WVJBHandler) (data, callback) -> {
Log.d("wvjsblog", "Java Echo called with: " + data.toString());
callback.onResult(data);
ARouter.getInstance().build(RouterUtil.WITHDRAW).withDouble("profit", Double.parseDouble(data.toString())).navigation();
});
//關閉webview頁面
mWebView.registerHandler("finish", (WVJBWebView.WVJBHandler) (data, callback) -> {
Log.d("wvjsblog", "Java Echo called with: " + data.toString());
callback.onResult(data);
activity.finish();
});
// 查看還款記錄
mWebView.registerHandler("repayrecord", (WVJBWebView.WVJBHandler) (data, callback) -> {
Log.d("wvjsblog", "Java Echo called with: " + data.toString());
callback.onResult(data);
ARouter.getInstance().build(RouterUtil.REPAYRECORD).navigation();
});
}
public static void initShare(Activity activity, ShareForWebBean bean) {
//wechat=微信,coterie=朋友圈,qq=QQ
SHARE_MEDIA share_media = SHARE_MEDIA.QQ;
if (!TextUtils.isEmpty(bean.getCode())) {
switch (bean.getCode()) {
case "wechat":
share_media = SHARE_MEDIA.WEIXIN;
break;
case "coterie":
share_media = SHARE_MEDIA.WEIXIN_CIRCLE;
break;
case "qq":
share_media = SHARE_MEDIA.QQ;
break;
}
}
String link = bean.getLink();
UMWeb web = new UMWeb(link);
web.setTitle(bean.getTitle());//標題
web.setThumb(new UMImage(activity, bean.getIcon())); //縮略圖
web.setDescription(bean.getDesc());//描述
new ShareAction(activity)
.setPlatform(share_media)//傳入平臺
.withText(bean.getTitle())//分享內容
.withMedia(web)
.setCallback(umShareListener)//回調監聽器
.share();
}
/** * 下載文件監聽 跳轉瀏覽器下載 * * @param mWebView */
public static void addDownLoadListener(Activity activity, WVJBWebView mWebView) {
mWebView.setDownloadListener((url, userAgent, contentDisposition, mimetype, contentLength) -> {
if (!TextUtils.isEmpty(url)) {
downloadByBrowser(activity, url);
}
});
}
public static void downloadByBrowser(Activity activity, String url) {
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.addCategory(Intent.CATEGORY_BROWSABLE);
intent.setData(Uri.parse(url));
activity.startActivity(intent);
}
/** * 加載的url歷史堆棧信息 * * @param loadHistoryUrls:url數組信息 * @param mWebView * @param activity * @param isMain:是否爲首頁的tab頁面 */
public static void receiverGoBack(ArrayList<String> loadHistoryUrls, WVJBWebView mWebView, Activity activity, boolean isMain, ImageView imageView) {
//過濾是否爲重定向後的連接
LogUtils.loge("網頁攔截中加載的url歷史堆棧信息:" + loadHistoryUrls.toString());
if (loadHistoryUrls.size() > 1 && !ConfigUtil.H5Pre.contains(loadHistoryUrls.get(loadHistoryUrls.size() - 1))) {
if (loadHistoryUrls.size() > 2) {
//移除加載棧中的最後兩個連接
loadHistoryUrls.remove(loadHistoryUrls.get(loadHistoryUrls.size() - 1));
loadHistoryUrls.remove(loadHistoryUrls.get(loadHistoryUrls.size() - 1));
}
if (loadHistoryUrls.size() > 1) {
//移除加載棧中的最後一個連接
loadHistoryUrls.remove(loadHistoryUrls.get(loadHistoryUrls.size() - 1));
}
LogUtils.loge("攔截中後退的url歷史記錄" + loadHistoryUrls.toString());
//加載重定向以前的頁
if (isMain) {
if (loadHistoryUrls.size() == 1) {
imageView.setVisibility(View.INVISIBLE);
}
}
mWebView.loadUrl(loadHistoryUrls.get(loadHistoryUrls.size() - 1));
} else {
activity.finish();
}
}
/** * 清除歷史消息 * * @param mWebView */
public static void clearWebInfo(WVJBWebView mWebView) {
if (mWebView != null) {
mWebView.clearHistory();
mWebView.clearCache(true);
mWebView.destroy();
}
}
public static void onPressGoBack(ArrayList<String> loadHistoryUrls, WVJBWebView mWebView, ImageView imageView, Activity activity) {
//過濾是否爲重定向後的連接
LogUtils.loge("網頁攔截中加載的url歷史堆棧信息:" + loadHistoryUrls.toString());
if (loadHistoryUrls.size() > 1 && !ConfigUtil.H5Pre.contains(loadHistoryUrls.get(loadHistoryUrls.size() - 1))) {
if (loadHistoryUrls.size() > 2) {
//移除加載棧中的最後兩個連接
loadHistoryUrls.remove(loadHistoryUrls.get(loadHistoryUrls.size() - 1));
loadHistoryUrls.remove(loadHistoryUrls.get(loadHistoryUrls.size() - 1));
}
if (loadHistoryUrls.size() > 1) {
//移除加載棧中的最後一個連接
loadHistoryUrls.remove(loadHistoryUrls.get(loadHistoryUrls.size() - 1));
}
LogUtils.loge("攔截中後退的url歷史記錄" + loadHistoryUrls.toString());
//加載重定向以前的頁
if (loadHistoryUrls.size() == 1) {
imageView.setVisibility(View.INVISIBLE);
}
mWebView.loadUrl(loadHistoryUrls.get(loadHistoryUrls.size() - 1));
} else {
if ((System.currentTimeMillis() - exitTime) > 2000) {
ToastUtil.showToast("再按一次退出程序");
exitTime = System.currentTimeMillis();
} else {
activity.finish();
}
}
}
public static Uri perImgUrl=null;
public static boolean captureImageFromCamera(Activity activity, Uri imageUri) {
File cacheDir = null;
if (Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())) {
cacheDir = activity.getExternalCacheDir();
}
if (cacheDir == null) {
cacheDir = activity.getCacheDir();
}
File outFile = new File(cacheDir, System.currentTimeMillis() + ".jpg");
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
if (Build.VERSION.SDK_INT > Build.VERSION_CODES.M) {//若是api大於Android api23 要替換獲取文件Uri方式
//此方法第二個參數authority的值要用項目中的值來替換,可網上找Android 7.0 FileProvider相關介紹
imageUri = FileProvider.getUriForFile(activity, "com.chelizi.xhc.provider.fileprovider", outFile);
perImgUrl=imageUri;
intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);//加入flag
} else {
imageUri = Uri.fromFile(outFile);
perImgUrl=imageUri;
intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);
intent.addCategory(Intent.CATEGORY_DEFAULT);
}
if (ContextCompat.checkSelfPermission(activity, Manifest.permission.CAMERA) == PackageManager.PERMISSION_GRANTED) {//有相機權限
PackageManager packageManager = activity.getPackageManager();
if (intent.resolveActivity(packageManager) != null) {
try {
activity.startActivityForResult(intent, ConfigUtil.ActResultConstant.FILECHOOSER_RESULTCODE);
return true;
} catch (Exception e) {
e.printStackTrace();
}
}
} else {//沒有相機權限
// TODO: 這裏作請求相機權限的處理(網上找Android 6.0權限管理相關介紹)
ToastUtil.showToast("請開啓相機權限");
}
return false;
}
public static Uri getImgeUrl(){
return perImgUrl;
}
/** * 調用系統相機拍攝視頻 */
public static boolean captureVideoFromCamera(Activity activity, Uri imageUri) {
File cacheDir = null;
if (Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())) {
cacheDir = activity.getExternalCacheDir();
}
if (cacheDir == null) {
cacheDir = activity.getCacheDir();
}
File outFile = new File(cacheDir, System.currentTimeMillis() + ".mp4");
Intent intent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE);
if (Build.VERSION.SDK_INT > Build.VERSION_CODES.M) {//若是api大於Android api23 要替換獲取文件Uri方式
//此方法第二個參數authority的值要用項目中的值來替換,可網上找Android 7.0 FileProvider相關介紹
Uri uri = FileProvider.getUriForFile(activity, "com.chelizi.xhc.provider.fileprovider", outFile);
perImgUrl=imageUri;
intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);//加入flag
} else {
Uri uri = Uri.fromFile(outFile);
perImgUrl=imageUri;
intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);
intent.addCategory(Intent.CATEGORY_DEFAULT);
}
//調系統相機拍攝視頻須要用到相機權限,先判斷有沒有這個權限
if (ContextCompat.checkSelfPermission(activity, Manifest.permission.CAMERA) == PackageManager.PERMISSION_GRANTED) {//有相機權限
PackageManager packageManager = activity.getPackageManager();
if (intent.resolveActivity(packageManager) != null) {
try {
activity.startActivityForResult(intent, FILECHOOSER_VIDEO_RESULTCODE);
return true;
} catch (Exception e) {
e.printStackTrace();
}
}
} else {//沒有相機權限
// TODO: 這裏作請求相機權限的處理(網上找Android 6.0權限管理相關介紹)
ToastUtil.showToast("請開啓相機權限");
}
return false;
}
}
複製代碼
Webview.javaios
@Route(path = RouterUtil.WEBVIEW)
public class WebViewActivity extends BaseActivity implements View.OnClickListener {
private final String AUTHTAG = "認證進度:";
@BindView(R.id.web_view)
WVJBWebView mWebView;
@BindView(R.id.tv_tag_content)
TextView mTvTagContent;
@BindView(R.id.dialog_view)
LinearLayout mDialogView;
@BindView(R.id.progressbar)
ProgressBar mProgressBar;
@Autowired(name = "url")
String url;
@Autowired(name = "title")
String title;
@Autowired(name = "applySuccess")
boolean isApplySuccess;
@Autowired(name = "amount")
String amount;
@Autowired(name = "orderId")
int orderId;
/** * 發送與接收的廣播 **/
@Autowired(name = "isMain")
boolean isMain;
@Autowired(name = "isCar")
boolean isCar;
@BindView(R.id.img_back)
ImageView img_back;
ValueCallback<Uri> uploadFile = null;
ValueCallback<Uri[]> filePathCallback = null;
private ArrayList<String> loadHistoryUrls = new ArrayList<String>();
private Uri imageUri;
@Override
public int getLayoutId() {
return R.layout.activity_loan_webview;
}
@Override
public void initPresenter() {
}
@Override
public void loadData() {
ARouter.getInstance().inject(this);
initView();
}
public void initView() {
if (getIntent() != null) {
if (!NormalRegUtil.isBlank(getIntent().getStringExtra("title"))) {
title = getIntent().getStringExtra("title");
}
}
//二手車
if (isCar) {
} else {
BannerItem bean = SharedInfo.getInstance().getEntity(BannerItem.class);
if (bean != null) {
if (!url.contains(bean.getOrderContractUrl())) {
if (url.startsWith(ConfigUtil.H5Pre)
|| url.startsWith(ConfigUtil.perBaseUrl)
|| url.startsWith(ConfigUtil.perBaseUrlForHttp)) {//表示有多是協議
if (isApplySuccess) {//是借款申請成功後獲取的
url = url + "?token=" + UserInfoTool.getToken() + "&amount=" + amount + "&orderId=" + orderId;
} else {
url = url + "?token=" + UserInfoTool.getToken();
}
}
}
}
}
Log.i("網頁攔截中加載的url:", url + "");
//把初始頁面Url加入
loadHistoryUrls.add(url);
mWebView.loadUrl(url);
WebUtils.loadWebSetting(mWebView);
mWebView.setWebChromeClient(new MyWebChromeClient());
mWebView.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
//將過濾到的url加入歷史棧中
loadHistoryUrls.add(url);
Log.i("網頁攔截中加載的url:", url);
view.loadUrl(url);
return super.shouldOverrideUrlLoading(view, url);
}
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
super.onPageStarted(view, url, favicon);
}
@Override
public void onPageFinished(WebView view, String url) {
super.onPageFinished(view, url);
}
});
WebUtils.addDownLoadListener(this, mWebView);
WebUtils.loadWebJsMethod(this, mWebView);
}
@Override
protected void onDestroy() {
super.onDestroy();
loadHistoryUrls.clear();
WebUtils.clearWebInfo(mWebView);
}
@Override
public void onBackPressed() {
super.onBackPressed();
WebUtils.receiverGoBack(loadHistoryUrls, mWebView, this, isMain, img_back);
}
@Override
protected void onResume() {
super.onResume();
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
UMShareAPI.get(this).onActivityResult(requestCode, resultCode, data);
Uri uri = null;
if (requestCode == FILECHOOSER_VIDEO_RESULTCODE && resultCode == RESULT_OK && data != null) {
uri = data.getData();
}
if (requestCode == FILECHOOSER_RESULTCODE && resultCode == RESULT_OK) {
uri = WebUtils.getImgeUrl();//拍照片data不會返回uri,用以前暫存下的
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {//android 5.0及以上
if (filePathCallback != null) {//將拍攝的照片或者視頻回調給H5
if (uri != null) {
filePathCallback.onReceiveValue(new Uri[]{uri});
} else {
filePathCallback.onReceiveValue(null);
}
filePathCallback = null;
}
} else {//android 5.0如下
if (uploadFile != null) {//將拍攝的照片或者視頻回調給H5
if (uri != null) {
uploadFile.onReceiveValue(uri);
} else {
uploadFile.onReceiveValue(null);
}
uploadFile = null;
}
}
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
//判斷是否能夠返回操做
if (mWebView.canGoBack() && event.getKeyCode() == KeyEvent.KEYCODE_BACK) {
WebUtils.receiverGoBack(loadHistoryUrls, mWebView, this, isMain, img_back);
return true;
}
return super.onKeyDown(keyCode, event);
}
@OnClick({R.id.img_back})
public void onClick(View v) {
switch (v.getId()) {
case R.id.img_back:
WebUtils.receiverGoBack(loadHistoryUrls, mWebView, this, isMain, img_back);
break;
}
}
class MyWebChromeClient extends WebChromeClient {
@Override
public void onProgressChanged(WebView view, int newProgress) {
if (newProgress == 100) {
mProgressBar.setVisibility(View.GONE);
} else {
mProgressBar.setVisibility(View.VISIBLE);
mProgressBar.setProgress(newProgress);
}
}
@Override
public void onReceivedTitle(WebView view, String webtitle) {
super.onReceivedTitle(view, webtitle);
LogUtils.logi("網頁標題:" + webtitle);
if (!TextUtils.isEmpty(webtitle)) {
mTitle.setTitle(false, null, webtitle);
} else {
mTitle.setTitle(false, null, "提現");
}
}
//Android 5.0 及以上 必須重寫此方法
@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
@Override
public boolean onShowFileChooser(WebView webView, ValueCallback<Uri[]> filePathCallback, FileChooserParams fileChooserParams) {
boolean fromCamera = fileChooserParams.isCaptureEnabled();
String[] acceptTypes = fileChooserParams.getAcceptTypes();
if (acceptTypes != null && acceptTypes.length > 0) {
boolean isImage = false;
for (String acceptType : acceptTypes) {
if (acceptType.contains("image")) {
isImage = true;
break;
}
}
if (isImage) {//處理圖片
if (fromCamera) {//只處理拍照
if (captureImageFromCamera(WebViewActivity.this, imageUri)) {
WebViewActivity.this.filePathCallback = filePathCallback;//暫存,用於拍完照片後回調H5
return true;//返回true表示APP處理文件選擇
}
}
}
boolean isVideo = false;
for (String acceptType : acceptTypes) {
if (acceptType.contains("video")) {
isVideo = true;
break;
}
}
if (isVideo) {//處理視頻
if (fromCamera) {//只處理拍攝視頻
if (captureVideoFromCamera(WebViewActivity.this, imageUri)) {
WebViewActivity.this.filePathCallback = filePathCallback;//暫存,用於拍攝完視頻後回調H5
return true;//返回true表示APP處理文件選擇
}
}
}
}
return super.onShowFileChooser(webView, filePathCallback, fileChooserParams);
}
//Android 5.0 如下 必須重寫此方法
public void openFileChooser(final ValueCallback<Uri> uploadFile, String acceptType, String capture) {
LogUtils.loge("點擊文件的類型是:" + acceptType);
boolean fromCamera = !TextUtils.isEmpty(capture);
if (acceptType != null && acceptType.contains("video")) {//處理視頻
if (fromCamera) {//只處理拍攝視頻
if (captureVideoFromCamera(WebViewActivity.this, imageUri)) {
WebViewActivity.this.uploadFile = uploadFile;//暫存,用於拍攝完視頻後回調H5
return;
}
}
}
if (acceptType != null && acceptType.contains("image")) {//處理圖片
if (fromCamera) {//只處理拍照
if (captureImageFromCamera(WebViewActivity.this, imageUri)) {
WebViewActivity.this.uploadFile = uploadFile;//暫存,用於拍完照片後回調H5
}
}
}
}
}
}
複製代碼