天天看點

Anndroid9.0聯網報CLEARTEXT communication to host not permitted by network還有WebView也會報錯

報錯原因:安卓 9.0以後,Google為了保證使用者資料的安全,預設要求使用加密的方式請求資料,也就是要求(https),非加密的請求都會被系統過濾掉,連webview中加載的網頁Url,也得準守同樣的規則。

解決方案目前有以下幾種(親測都有效):

1.把所有請求都換成https,但是之前項目裡如果大量或全部用了http請求,那換起來成本較大,可以考慮其它方式;

2.如果項目不需要對Android P進行适配,可以把targetSdkVersion改為27以及以下;

-----------------------以下方式,版本号随意---------------------------

3.最簡單方式:直接在AndroidManifest.xml中application裡加上

<?xml version="1.0" encoding="utf-8"?>
<manifest ...>
    <uses-permission android:name="android.permission.INTERNET" />
    <application
        ...
        android:usesCleartextTraffic="true"
        ...>
        ...
    </application>
</manifest>
           

4.更改網絡配置:

在res檔案夾下建立一個xml檔案夾,然後建立一個network_security_config.xml檔案:

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <domain-config cleartextTrafficPermitted="true">
        <domain includeSubdomains="true">Your URL(ex: 127.0.0.1)</domain>
    </domain-config>
</network-security-config>
           

然後在AndroidManifest.xml中

<?xml version="1.0" encoding="utf-8"?>
<manifest ...>
    <uses-permission android:name="android.permission.INTERNET" />
    <application
        ...
        android:networkSecurityConfig="@xml/network_security_config"
        ...>
        ...
    </application>
</manifest>
           

由于我司項目中用的都是http請求,是以,我就采用了3,4兩種方式一起上了(反正也不麻煩,更保險點吧),其實任意一種即可。

更多資訊可以上Google官網:看看