我是新来的。我构建了一个简单的应用程序,该程序将一些数据发送到服务器并接收响应。
该应用在android N以下的设备上都可以正常运行。但是在O和P上则无法运行。似乎问题出在互联网许可上。我已经检查过,该应用程序在o和p上运行时未向服务器发送任何数据。如果需要我的互联网访问权限,请告诉我。
我已在清单中添加了它
<uses-permission android:name="android.permission.INTERNET" />
任何帮助将不胜感激。
答案 0 :(得分:5)
可能是因为您使用的是http
。从Android O开始,您需要使用https
而不是http
,否则会出现错误Cleartext HTTP traffic to * not permitted
。因此,您需要创建一个配置以允许这样做。您可以将其引用到Opt out of cleartext traffic
文档详细信息:
注意:本节中的指导仅适用于定位到 Android 8.1(API级别27)或更低版本。从Android 9(API 级别28),默认情况下会禁用明文支持。
打算仅使用安全连接到目的地的应用程序 连接可以选择不支持明文(使用未加密的 HTTP协议而不是HTTPS)。这个选项 有助于防止由于URL更改而导致应用程序意外退缩 由外部资源(例如后端服务器)提供。看到
NetworkSecurityPolicy.isCleartextTrafficPermitted()
以获得更多详细信息。例如,一个应用可能想要确保所有与
secure.example.com
总是通过HTTPS完成,以保护敏感 来自敌对网络的流量。
res/xml/network_security_config.xml
:<?xml version="1.0" encoding="utf-8"?> <network-security-config> <domain-config cleartextTrafficPermitted="false"> <domain includeSubdomains="true">secure.example.com</domain> </domain-config> </network-security-config>
。
您也可以在android:usesCleartextTraffic="true"
中将AndroidManifest.xml
用于开发模式,但不要在发布模式下使用。在Android Developer Blog中,有关此内容的更多详细信息,请参见以下摘录:
阻止生产中的明文流量
为了保护您的应用程序的安装基础免受回归到 明文流量,声明android:usesCleartextTraffic =“ false” 属性在您应用的 AndroidManifest.xml。这声明该应用程序不应使用 明文网络流量,使平台网络堆栈 Android棉花糖可阻止该应用中的明文流量。例如, 如果您的应用程序意外尝试通过明文登录用户 HTTP请求,该请求将被阻止,并且用户的身份和 密码不会泄漏到网络。
您不必将应用程序的minSdkVersion或targetSdkVersion设置为 23(Android Marshmallow)以使用android:usesCleartextTraffic。在老 平台,此属性将被忽略,因此无效。
请注意,WebView尚不支持此功能。
在某些情况下,明文流量仍可能离开或 输入应用程序。例如,Socket API会忽略明文策略 因为它不知道它发送或接收的数据是否可以 归类为明文。 Android平台HTTP堆栈,另一方面 尊重政策,因为他们知道流量是否为明文。
Google AdMob也是为了遵守该政策而创建的。当您的应用 声明它不使用纯文本流量,仅使用HTTPS广告 应该投放到该应用。
鼓励第三方网络,广告和分析库添加 对此政策的支持。他们可以查询明文流量策略 通过NetworkSecurityPolicy类。
答案 1 :(得分:4)
如果您的网址以http
开头,那么您必须在Android Pie中使用它,即API级别28
android:usesCleartextTraffic="true"
在清单中的应用标签内 作为属性
答案 2 :(得分:1)
在AndroidManifest.xml文件中添加以下代码行:
android:usesCleartextTraffic="true"
现在可以解决问题。但是您应该尽快迁移到“ HTTPS”。
答案 3 :(得分:0)
以 http:// 开头的URL,您需要在清单文件中的application标记内添加以下属性。
android:usesCleartextTraffic="true"