java.net.UnknownServiceException: CLEARTEXT communication to wanandroid.com not permitted by network
java.net.UnknownServiceException: CLEARTEXT communication to wanandroid.com not permitted by network?
問題描述:(我后面說的羅里吧嗦一大堆,其實就是網絡請求沒請求到數據,著急的小伙伴直接看解決方案)在做視頻下載的時候,一直下載不到本地的文件中,就翻到最里層的代碼去看,翻了一天,終于到了網絡請求的那一步,發現請求不到數據,仔細看了看okhttp請求的代碼,What?開玩笑呢?沒毛病啊? ?后來重新寫了一個網絡請求,發現失敗回調的方法里竟然有這個異常,就搜了一下,看到了這篇文章,最后,終于把問題給解決了,又看了幾篇其他作者的文章,發現還有其他的解決辦法,
錯誤原因:這個錯誤是在安卓P系統上當調用遠程接口進行網絡通信時報的錯誤。
大白話:由于 Android P(版本27以上) 限制了明文流量的網絡請求,非加密的流量請求都會被系統禁止掉。所以如果當前應用的請求是 htttp 請求,而非 https ,這樣就會導系統禁止當前應用進行該請求。
專業術語:Android致力于保護用戶們的設備和數據安全。我們保證數據安全的方法之一是保護所有進入或離開Android設備的數據在傳輸中使用傳輸層安全性(TLS)。正如我們在Android P開發人員預覽中所宣布的那樣,我們通過阻止針對Android P的應用程序默認允許未加密的連接來進一步改進這些保護。這是我們多年來為更好地保護Android用戶而做出的各種更改。為了防止意外的未加密連接,我們android:usesCleartextTraffic在Android Marshmallow中引入了manifest屬性。在Android Nougat中,我們通過創建Network Security Config功能擴展了該屬性,該功能允許應用程序指示他們不打算在沒有加密的情況下發送網絡流量。在Android Nougat和Oreo中,我們仍然允許明文連接。
?
解決方法:共四種
1、如果一定要使用明文通信的話,則可以打開AndroidManifest.xml 文件,在 application 元素中添加:
android:usesCleartextTraffic="true"
備注:
1)為了安全,不建議上面的使用明文的通信方式,不過上面的這種方法可以作為一種臨時的通信策略
2)如果聲明不使用明文通信,則可以在application元素中添加:
android:usesCleartextTraffic=”false”?
此聲明指示該應用不使用明文網絡通信,并使 Android Marshmallow 的平臺網絡堆棧禁止該應用中的明文通信。例如,如果您的應用意外嘗試通過 HTTP 明文請求登錄用戶,該請求將被阻止,該用戶的身份和密碼信息不會泄露到網絡上。
2、項目改用https請求;
3、項目的targetSdkVersion改為27以下;
4、在res的xml目錄下,新建一個xml文件(名稱自定義,如:network_security_config.xml),內容如下:
<?xml version="1.0" encoding="utf-8"?> <network-security-config><base-config cleartextTrafficPermitted="true" /> </network-security-config>在manifest清單文件配置application:
<application ...android:networkSecurityConfig="@xml/network_security_config" .../>轉載??https://blog.csdn.net/pengyu1801/article/details/87879850? 和 https://blog.csdn.net/mysimplelove/article/details/84063571兩篇博文,留著只是當做筆記使用,幸運的話,還能解決一些小伙伴的問題
總結
以上是生活随笔為你收集整理的java.net.UnknownServiceException: CLEARTEXT communication to wanandroid.com not permitted by network的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 解决Redmi 6 pro底部出现黑边问
- 下一篇: NullPointerException