问题
在Android 9.0手机使用OkHttp请求一个http地址,会报如下错误。
java.net.UnknownServiceException: CLEARTEXT communication to **** not permitted by network security policy
原因是Android 9.0以后,Google官方解释:
为保证用户数据和设备的安全,Google针对下一代 Android 系统(Android P) 的应用程序,将要求默认使用加密连接,这意味着
Android P 将禁止 App 使用所有未加密的连接,因此运行 Android P
系统的安卓设备无论是接收或者发送流量,未来都不能明码传输。
三种解决办法
- APP 改用 https 请求
- argetSdkVersion 降到27以下更改
- 网络安全配置
第三种方法实现
在res文件夹下创建一个xml文件夹,然后在xml目录下创建一个network_security_config.xml文件,文件内容如下:
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<base-config cleartextTrafficPermitted="true" />
</network-security-config>
在AndroidManifest.xml文件下的application标签增加属性
android:networkSecurityConfig="@xml/network_security_config"
配置完毕,就可以访问http地址了。