--記錄webview的簡單使用--
要使用Webview的全部功能需要一下設置:
WebSettings webSettings = mWebView.getSettings();
webSettings.setJavaScriptEnabled(true); //可執行js
webSettings.setDefaultZoom(WebSettings.ZoomDensity.MEDIUM); //設置頁面默認縮放密度
webSettings.setDefaultTextEncodingName("UTF-8"); //設置默認的文本編碼名稱,以便在解碼html頁面時使用
webSettings.setAllowContentAccess(true); //啓動或禁用WebView內的內容URL訪問
webSettings.setAppCacheEnabled(false); //設置是否應該啓用應用程序緩存api
webSettings.setBuiltInZoomControls(false); //設置WebView是否應該使用其內置的縮放機制
webSettings.setUseWideViewPort(true); //設置WebView是否應該支持viewport
webSettings.setLoadWithOverviewMode(true); //不管WebView是否在概述模式中載入頁面,將內容放大適合屏幕寬度
webSettings.setCacheMode(WebSettings.LOAD_NO_CACHE); //重寫緩存的使用方式
webSettings.setJavaScriptCanOpenWindowsAutomatically(true); //告知js自動打開窗口
webSettings.setLoadsImagesAutomatically(true); //設置WebView是否應該載入圖像資源
webSettings.setAllowFileAccess(true); //啓用或禁用WebView內的文件訪問
webSettings.setDomStorageEnabled(true);
1.打開外部APP 一般外部app打開都是使用deeplink的形式 ,有個特殊的Scheme,因此我們特殊處理非http/https開頭的鏈接即可:
mWebView.setWebViewClient(new WebViewClient(){
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
if (!(url.startsWith("http") || url.startsWith("https"))) {
Intent intent = new Intent();
intent.setAction(Intent.ACTION_VIEW);
intent.setData(Uri.parse(url));
startActivity(intent);
return true;
}
view.loadUrl(url);
return true;
}
});
2.獲取網頁標題
mWebView.setWebChromeClient(new WebChromeClient(){
@Override
public void onReceivedTitle(WebView view, String title) {
super.onReceivedTitle(view, title);
if (!TextUtils.isEmpty(title))
mTitleTv.setText(title);
}
});
3.監聽點擊的鏈接是不是下載,包括302跳轉下載類型
mWebView.setDownloadListener(new DownloadListener() {
@Override
public void onDownloadStart(String url, String userAgent, String contentDisposition, String mimetype, long contentLength) {
LogUtils.log("啓動下載:" + mUrl);
LogUtils.log("has download:"+url);
//做下載邏輯
}
});
4.返回網頁級而不是退出頁面
//點擊回退按鈕不是退出應用程序,而是返回上一個頁面
@Override
public void onBackPressed() {
if (mWebView.canGoBack()) {
mWebView.goBack();
}else {
super.onBackPressed();
}
}
-------------完整代碼
package com.xmiles.hytechad.activity;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.KeyEvent;
import android.view.View;
import android.webkit.DownloadListener;
import android.webkit.WebChromeClient;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.TextView;
import com.xmiles.hytechad.R;
import com.xmiles.hytechad.utils.DownloadUtils;
import com.xmiles.hytechad.utils.LogUtils;
public class WebViewActivity extends AppCompatActivity {
public static final String KEY_URL="url";
public static final String KEY_DOWNLOAD_NAME="download_name";
public static final String KEY_S_DOWNLOAD="start_download";
public static final String KEY_E_DOWNLOAD="end_download";
public static final String KEY_S_INSTALL="start_install";
public static final String KEY_E_INSTALL="end_install";
private TextView mTitleTv;
private WebView mWebView;
private String mUrl;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.hy_ad_web_view);
mUrl = getIntent().getStringExtra("url");
if (mUrl==null){
finish();
return;
}
mTitleTv=findViewById(R.id.title);
mWebView=findViewById(R.id.webView);
findViewById(R.id.back).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
onBackPressed();
}
});
initWebView();
mWebView.loadUrl(mUrl);
}
private void initWebView() {
WebSettings webSettings = mWebView.getSettings();
webSettings.setJavaScriptEnabled(true); //可執行js
webSettings.setDefaultZoom(WebSettings.ZoomDensity.MEDIUM); //設置頁面默認縮放密度
webSettings.setDefaultTextEncodingName("UTF-8"); //設置默認的文本編碼名稱,以便在解碼html頁面時使用
webSettings.setAllowContentAccess(true); //啓動或禁用WebView內的內容URL訪問
webSettings.setAppCacheEnabled(false); //設置是否應該啓用應用程序緩存api
webSettings.setBuiltInZoomControls(false); //設置WebView是否應該使用其內置的縮放機制
webSettings.setUseWideViewPort(true); //設置WebView是否應該支持viewport
webSettings.setLoadWithOverviewMode(true); //不管WebView是否在概述模式中載入頁面,將內容放大適合屏幕寬度
webSettings.setCacheMode(WebSettings.LOAD_NO_CACHE); //重寫緩存的使用方式
webSettings.setJavaScriptCanOpenWindowsAutomatically(true); //告知js自動打開窗口
webSettings.setLoadsImagesAutomatically(true); //設置WebView是否應該載入圖像資源
webSettings.setAllowFileAccess(true); //啓用或禁用WebView內的文件訪問
webSettings.setDomStorageEnabled(true); //設置是否啓用了DOM存儲API,默認爲false
mWebView.setWebViewClient(new WebViewClient(){
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
if (!(url.startsWith("http") || url.startsWith("https"))) {
Intent intent = new Intent();
intent.setAction(Intent.ACTION_VIEW);
intent.setData(Uri.parse(url));
startActivity(intent);
return true;
}
view.loadUrl(url);
return true;
}
});
mWebView.setWebChromeClient(new WebChromeClient(){
@Override
public void onReceivedTitle(WebView view, String title) {
super.onReceivedTitle(view, title);
if (!TextUtils.isEmpty(title))
mTitleTv.setText(title);
}
});
mWebView.setDownloadListener(new DownloadListener() {
@Override
public void onDownloadStart(String url, String userAgent, String contentDisposition, String mimetype, long contentLength) {
LogUtils.log("啓動下載:" + mUrl);
LogUtils.log("has download:"+url);
new DownloadUtils(WebViewActivity.this,url,getIntent().getStringExtra(KEY_DOWNLOAD_NAME)+".apk").startDownloadWithReport(getIntent().getStringArrayListExtra(KEY_S_DOWNLOAD),getIntent().getStringArrayListExtra(KEY_E_DOWNLOAD),getIntent().getStringArrayListExtra(KEY_S_INSTALL),getIntent().getStringArrayListExtra(KEY_E_INSTALL));
}
});
}
//點擊回退按鈕不是退出應用程序,而是返回上一個頁面
@Override
public void onBackPressed() {
if (mWebView.canGoBack()) {
mWebView.goBack();
}else {
super.onBackPressed();
}
}
}
-------
再送上使用Android DownloadManager下載的代碼一份,監聽到下載請求時使用:
--------