在Android 9及更高版本中,禁止了在WebView中使用明文HTTP流量。为了解决这个问题,您需要使用加密的HTTPS流量。
下面是一个示例代码,演示如何在WebView中使用加密的HTTPS流量:
import android.annotation.SuppressLint;
import android.net.http.SslError;
import android.os.Bundle;
import android.webkit.SslErrorHandler;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import androidx.appcompat.app.AppCompatActivity;
public class MainActivity extends AppCompatActivity {
private WebView webView;
@SuppressLint("SetJavaScriptEnabled")
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
webView = findViewById(R.id.webView);
webView.setWebViewClient(new MyWebViewClient());
WebSettings webSettings = webView.getSettings();
webSettings.setJavaScriptEnabled(true);
webSettings.setDomStorageEnabled(true);
// 允许使用混合内容
webSettings.setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW);
webView.loadUrl("https://example.com");
}
private class MyWebViewClient extends WebViewClient {
@Override
public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
// 忽略SSL证书错误
handler.proceed();
}
}
}
在上面的代码中,我们通过设置WebSettings的setMixedContentMode方法允许使用混合内容(即同时使用HTTP和HTTPS),并且通过设置WebViewClient的onReceivedSslError方法忽略SSL证书错误。这样,WebView就可以正常加载使用HTTPS的网页了。
请注意,忽略SSL证书错误可能会导致安全风险,请在实际应用中根据需要进行处理。