簡體   English   中英

Android Webview 訪問被拒絕

[英]Android Webview access denied

在 Android 9(Api 29)上,我試圖加載 url 並且我收到錯誤“url 的網頁無法加載:

我在AndroidManifest.xml文件中有互聯網權限

<uses-permission android:name="android.permission.INTERNET" />

從 logcat 中,我也可以看到以下錯誤:

E/chromium: [ERROR:socket_posix.cc(94)] CreatePlatformSocket() failed: Operation not permitted (1)

我的代碼如下:

WebView webView = findViewById(R.id.webView);
webView.loadUrl("https://andela.com/alc/");

我后來添加了以下代碼以獲取更多詳細信息:

webView.setWebViewClient(new WebViewClient(){
    @Override
    public void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error) {
        super.onReceivedError(view, request, error);
        Log.d("TAG", error.getDescription().toString());
        // handler.proceed(); This line wont make a different on API 29, Webview still bank
    }
});

The Webview loads the url properly when using an emulator running API 25. Also tested on API 28 and it works fine. 僅不適用於 API 29。

在我的情況下,在build.gradle更改applicationId后,網頁變得正確加載(沒有ERR_ACCESS_DENIED )(當然,並運行應用程序)。 之后,您可以返回舊的applicationId

只需卸載該應用程序並再次安裝它。那工作 100%

這在最新的“Q Android 10”中被打破,將目標框架更改為“Pie-Android 9”,它將起作用。 去改變

文件 > 項目結構

然后在左側 > 模塊 > 編譯器 SK 版本(更改為 Api 28)

注意:如果還沒有安裝 Android PIE 或者該選項沒有出現,請轉到首選項然后 > 系統首選項 > 左側的 Android SDK

從模擬器或手機完全卸載應用程序,然后重新編譯或安裝。 它應該已經工作了。

先卸載應用,插入權限后重新安裝

<uses-permission android:name="android.permission.INTERNET" />

不要只是重新啟動。

如果從設備存儲訪問 html 文件,則針對 Android S+ 將要求您提供文件訪問權限。 只需添加以下行:

webview.getSettings().setAllowFileAccess(true);

這為我解決了上述錯誤。

可能是 SSL 證書拋出錯誤,試試這個:

// Ignoring SSL certificate errors

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

您可以嘗試使用Android Smart WebView框架構建您的應用程序,它可以讓您更深入地了解您的網頁可能發生的情況。

雖然為時已晚。 我也遇到過同樣的問題。 並通過網絡設置進行修復。 下面給出了示例代碼。

    WebView webView = findViewById(R.id.webView);
    WebSettings webSettings = webView.getSettings();
    webSettings.setAppCacheEnabled(true);
    webSettings.setCacheMode(webSettings.LOAD_CACHE_ELSE_NETWORK);
    webSettings.setJavaScriptEnabled(true);
    webSettings.setLoadWithOverviewMode(true);
    webSettings.setAllowFileAccess(true);

     //if SDK version is greater of 19 then activate hardware acceleration otherwise activate software acceleration
    if (Build.VERSION.SDK_INT >= 19) {
        webView.setLayerType(View.LAYER_TYPE_HARDWARE, null);
    } else if (Build.VERSION.SDK_INT >= 11 && Build.VERSION.SDK_INT < 19) {
        webView.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
    }


    webView.loadUrl("https://andela.com/alc/");

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM