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两篇博文,留着只是当做笔记使用,幸运的话,还能解决一些小伙伴的问题

  • 8
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值