今天我在学习安卓网络编程,抓取网络图片时,遇到了一个问题。
大家知道,如果想让程序在网络中抓取图片,需要在清单文件里加入网络权限<uses-permission android:name="android.permission.INTERNET" />
我遇到了一个什么问题呢,就是明明代码没有错误就是抓取不到,我百思不得其解,非常焦虑,于是请教了我的学长,给我指了一条明路。
android:usesCleartextTraffic="true"
大家看红线的部分,就是解决问题的 “制胜法宝” ,我便查询了一些资料,了解到了安卓在Android 9.0(P ,API 28)版本,限制了http明文流量的网络请求,未加密的流量请求都会被系统禁掉。
所以如果当前应用的请求是 http 请求,而非 https,这样就会导系统禁止当前应用进行该请求,导致我的图片无法抓取成功。
------
Android 致力于保护用户们的设备和数据安全。
我们保证数据安全的方法之一是保护所有进入或离开Android 设备的数据在传输中使用传输层安全性(TLS)。
我们通过阻止针对Android P的应用程序默认允许未加密的连接来进一步改进这些保护。
------简书作者(破z晓)
我们通过在清单文件里添加了android:usesCleartextTraffic="true",这个的作用是指示应用程序是否打算使用明文网络流量,加上一行代码后问题成功解决。避免使用明文流量的原因是缺乏机密性,真实性和防篡改保护;网络攻击者可以窃听所传输的数据,并且还可以对其进行修改而不会被检测到。