以下是详解"Android用WebView加载网页(HTTPS和HTTP)"的完整攻略。
1. 添加权限
一般情况下,Android App通过Http请求一个网页,需要在AndroidManifest.xml
中添加INTERNET
权限。
<uses-permission android:name="android.permission.INTERNET" />
当你的请求链接是HTTPS,则需要添加以下权限:
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
2. 准备WebView
当我们请求WebView加载网页时,一定需要在布局中定义一个WebView组件。
<WebView
android:id="@+id/wv_content"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
接着,在代码中找到这个WebView,并设置它的一些基本属性,如:
WebView webView = (WebView) findViewById(R.id.wv_content);
webView.getSettings().setJavaScriptEnabled(true);
webView.getSettings().setDomStorageEnabled(true);
通常来讲,WebView的默认行为是禁止JavaScript运行,因此,我们需要在代码中将JavaScript设置为启用。此外,由于浏览器缓存数据已经存储在DOM存储中,因此我们可以将WebView中客户端的状态保持在一定程度上,以提高用户的使用体验。
3. 载入URL
在这一步骤中,我们需要将URL加载到已准备好的WebView中。我们可以通过两种不同的方式来完成。
3.1 使用WebView加载URL
如果你需要从一个Activity中打开一个网页,那么下面的代码会帮助你完成这个过程:
webView.loadUrl(url);
3.2 使用Intent加载URL
如果你需要从一个Activity切换到另一个Activity并且在其中打开一个URL,则使用Intent跳转。
Intent intent = new Intent(this, WebViewActivity.class);
intent.putExtra("loadUrl", url);
startActivity(intent);
在新的Activity中,可以使用以下代码来加载网页:
webview.loadUrl(getIntent().getStringExtra("loadUrl"));
4. HTTPS的证书问题
当你使用HTTPS协议来请求一个网页时,你还需要特殊处理一些证书问题。
大多数时候,这些证书问题都是由于https链接中包含了不受信任的自签名证书而引起的。如果想要绕过这些证书问题,我们可以使用下面的代码来忽略证书验证:
WebView webView = (WebView) findViewById(R.id.wv_content);
webView.setWebViewClient(new WebViewClient() {
@Override
public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
handler.proceed(); // 忽略证书
}
});
在这个代码块中,我们创建一个WebViewClient
对象,并重写onReceivedSslError
方法,其中我们调用传入的SslErrorHandler
对象的proceed()
方法来绕过证书错误。
5. HTTP协议中的重定向
在HTTP协议中,我们经常会遇到重定向的情况。如果你想要在在WebView中正确处理重定向,你需要重写WebViewClient
中的shouldOverrideUrlLoading()
方法:
webView.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
view.loadUrl(url);
return true;
}
});
在这个方法中,我们让WebView处理URL并返回一个true
值通知WebView处理该请求。
以上就是详解"Android用WebView加载网页(HTTPS和HTTP)"的完整攻略。希望对你有所帮助!
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解android 用webview加载网页(https和http) - Python技术站