36.9 WebView功能設計
在使用WebView控件時,除了設置是否支持js、緩存大小、緩存模式、文字編碼類型、圖片縮放和網頁縮放等外,還需重寫許多函數,具體如下:
mWebView.setWebViewClient(newWebViewClient() {
@Override
public booleanshouldOverrideUrlLoading(WebView view, String url) {
if(url.startsWith("http:") || url.startsWith("https:") ) {
return false;
}
//網頁中如果有tel:、mailto:這樣的鏈接,需要單獨處理??????????????? taskUrl = url;
urlTask();
return true;
}
//在以下幾個函數中,需要關閉加載提示框
@Override
public void onPageFinished(WebViewview, String url) {
super.onPageFinished(view,url);
UIHelper.dismiss(dialogFragment);
}
@Override
public void onReceivedError(WebViewview, int errorCode, String description, String failingUrl) {
super.onReceivedError(view,errorCode, description, failingUrl);
UIHelper.dismiss(dialogFragment);
//顯示提示用戶遇到錯誤,需要重新加載的網頁
mWebView.loadUrl("file:///android_asset/error.html");
}
@Override
public voidonReceivedHttpError(WebView view, WebResourceRequest request,WebResourceResponse errorResponse) {
super.onReceivedHttpError(view,request, errorResponse);
UIHelper.dismiss(dialogFragment);
//顯示提示用戶遇到錯誤,需要重新加載的網頁
mWebView.loadUrl("file:///android_asset/error.html");
}
});
}
//返回鍵處理
public boolean onKeyDown(int keyCode,KeyEvent event) {
if ((keyCode == KeyEvent.KEYCODE_BACK)&&
mWebView.canGoBack()){
mWebView.goBack(); //goBack()表示返回WebView的上一頁面
return true;
}
return super.onKeyDown(keyCode, event);
}
publicvoid urlTask() {
if(taskUrl.startsWith("tel:")) {
//Android6.0系統需要動態申請權限
if(EasyPermissions.hasPermissions(this,
Manifest.permission.CALL_PHONE)){
// Have permission, do thething!
Intent intent = newIntent(Intent.ACTION_VIEW,
Uri.parse(taskUrl));
startActivity(intent);
} else {
// Ask for one permission
EasyPermissions.requestPermissions(this,
getString(R.string.rationale_call_phone),
RC_TEL_PERM,
Manifest.permission.CALL_PHONE);
}
} else {
Intent intent = newIntent(Intent.ACTION_VIEW,
Uri.parse(taskUrl));
startActivity(intent);
}
}