Android Q(API级别29)不会加载HTTPS网站。给出错误:(net :: ERR_ACCESS_DENIED)

时间:2019-11-17 13:46:19

标签: java android android-studio android-webview android-10.0

我试图在Stackoverflow上修复issue,因为该人试图利用WebView加载Facebook网站“ https://facebook.com/”,但无法完成。我查看了代码,发现onReceivedSslError()方法没有被覆盖。我覆盖了它,并在运行Android 9(API级别28)及更低版本的Android模拟器上对它进行了测试,即使没有添加cleartextTrafficPermitted ,它也可以正常运行,但在Android Q(API级别)上进行测试29),我收到此错误:

  

net :: ERR_ACCESS_DENIED

enter image description here

这是onCreate方法的副本:

@SuppressLint("SetJavaScriptEnabled")
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


        WebView webDimrah = findViewById(R.id.WebView1);
        WebSettings webSettingDimrah = webDimrah.getSettings();
        webSettingDimrah.setJavaScriptEnabled(true);
        webDimrah.setWebViewClient(new WebViewClient(){

            @Override
            public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) {
                super.onReceivedSslError(view, handler, error);
                handler.proceed();
            }

            @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
                view.loadUrl(request.getUrl().toString());
                return true;
            }
        });
        webDimrah.loadUrl("https://facebook.com/");

    }

Internet权限已添加到清单文件。任何有关如何解决此问题的建议将不胜感激:)

2 个答案:

答案 0 :(得分:1)

您必须在清单中使用android:usesCleartextTraffic。

如果存在Android网络安全配置,则在Android 7.0(API级别24)及更高版本上将忽略此标志。

请查看开发者网站上的以下说明,以获取更多详细信息。

https://developer.android.com/guide/topics/manifest/application-element#usesCleartextTraffic

答案 1 :(得分:0)

在清单中确保添加android:usesCleartextTraffic="true"

Android 6.0在android清单中的application元素下引入了useCleartextTraffic属性。 Android P中的默认值为“ false”。将此设置为true表示该应用打算使用清晰的网络流量。