【问题标题】:Internet permission not working in oreo and pie互联网许可在奥利奥和派中不起作用
【发布时间】:2019-09-28 01:33:07
【问题描述】:

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

该应用程序在最高 android N 的设备上运行良好。但在 O 和 P 上无法运行。似乎问题出在互联网许可上。我已经检查过,该应用程序在 o 和 p 上运行时没有向服务器发送任何数据。如果我需要寻求任何特定的互联网访问权限,请告诉我。

我已经在清单中添加了这个

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

任何帮助将不胜感激。

【问题讨论】:

  • 您在尝试向服务器发送数据时一定遇到了错误。请使用日志更新您的问题。
  • 它必须工作,检查响应,让我们看看结果是什么......
  • 我在 logcat 中没有收到任何错误,也没有工作。我正在使用 volley 25 发送数据,但它没有发送。

标签: java android android-8.0-oreo


【解决方案1】:

如果您的 URL 以 http 开头,那么您必须在 Android Pie 中使用它,即 API 级别 28

android:usesCleartextTraffic="true"

在您的应用程序标签内的清单中 作为属性

【讨论】:

  • 就是这样。非常感谢。
  • 乐于助人:)
【解决方案2】:

这可能是因为您使用的是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>

.


你也可以在你的AndroidManifest.xml 中使用android:usesCleartextTraffic="true" 作为你的开发模式,但你不应该在发布模式下使用它。更多详情请见Android Developer Blog,此处摘录:

在生产环境中阻止明文流量

为了保护您的应用的安装基础免受回归 明文流量,声明 android:usesCleartextTraffic=”false” 应用程序元素上的属性 AndroidManifest.xml。这声明该应用程序不应该使用 明文网络流量,并使平台网络堆栈 Android Marshmallow 阻止应用程序中的明文流量。例如, 如果您的应用意外尝试通过明文登录用户 HTTP 请求,该请求将被阻塞并且用户的身份和 密码不会泄露给网络。

您不必将应用的 minSdkVersion 或 targetSdkVersion 设置为 23 (Android Marshmallow) 使用 android:usesCleartextTraffic。在较旧的 平台,该属性被简单地忽略,因此没有效果。

请注意,WebView 尚不支持此功能。

在某些情况下,明文流量可能仍会离开或 进入应用程序。例如,Socket API 忽略明文策略 因为它不知道它发送或接收的数据是否可以 被归类为明文。 Android 平台 HTTP 堆栈,另一方面 手,遵守政策,因为他们知道流量是否是明文。

Google AdMob 也是为了遵守这项政策而构建的。当你的应用 声明它不使用明文流量,仅使用 HTTPS 广告 应该提供给应用程序。

鼓励第三方网络、广告和分析库添加 支持这项政策。他们可以查询明文流量策略 通过 NetworkSecurityPolicy 类。

【讨论】:

  • 太棒了!请接受可以解决您问题的答案之一。
  • 为什么我们不应该在发布版本中使用第二种解决方案?如果您能提供一些相关文档,那就太好了。非常感谢!
【解决方案3】:

在 AndroidManifest.xml 文件中添加以下代码行:

android:usesCleartextTraffic="true"

虽然,这会给你警告:

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

【讨论】:

    【解决方案4】:

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

    android:usesCleartextTraffic="true"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-14
      相关资源
      最近更新 更多