Internet权限不适用于Oreo和Pie

时间:2019-03-09 07:04:37

标签: java android android-8.0-oreo

我是新来的。我构建了一个简单的应用程序,该程序将一些数据发送到服务器并接收响应。

该应用在android N以下的设备上都可以正常运行。但是在O和P上则无法运行。似乎问题出在互联网许可上。我已经检查过,该应用程序在o和p上运行时未向服务器发送任何数据。如果需要我的互联网访问权限,请告诉我。

我已在清单中添加了它

<uses-permission android:name="android.permission.INTERNET" />

任何帮助将不胜感激。

4 个答案:

答案 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"

尽管如此,这会给您警告: Warning when we add android:usesCleartextTraffic="true"

现在可以解决问题。但是您应该尽快迁移到“ HTTPS”。

答案 3 :(得分:0)

http:// 开头的URL,您需要在清单文件中的application标记内添加以下属性。

android:usesCleartextTraffic="true"