用户反应本来好用的app,突然无法访问服务器,不能正常用了,拿到手机,从头检查权限,重新安装都不能解决,网络是正常的,怎么就不能访问网络了呢?所有想到的办法都用了而不能解决,最后想起看一下android版本,原来升级到9了!

看Delphi上如何解决这个问题:

第一步:制作配置文件network_security_config.xml,下面是内容:

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<base-config cleartextTrafficPermitted="true" />
</network-security-config>

然后在项目文件夹建一个子文件夹res/xml,把network_security_config.xml保存到res/xml下。

第二步:.修改项目的AndroidManifest.template文件

下面是我修改的结果,在applicaiton段增加了networkSecurityConfig一行

    <application android:persistent="%persistent%"
android:restoreAnyVersion="%restoreAnyVersion%"
android:label="%label%"
android:debuggable="%debuggable%"
android:largeHeap="%largeHeap%"
android:icon="%icon%"
android:theme="%theme%"
android:hardwareAccelerated="%hardwareAccelerated%"
android:networkSecurityConfig
="@xml/network_security_config"
>

在application段,增加一行,引用第一步制作的文件network_security_config.xml

android:networkSecurityConfig="@xml/network_security_config"

注意:一定要写对位置,我就犯了错,因为没写对,浪费几个小时。

第三步:发布network_security_config.xml

通过Project->Deployment菜单,打开发布文件窗口,把 network_security_config.xml加进去,如下图:

注意,发布文件路径,即Remote Path为res\xml\

保存后,重新编译项目,正常情况下,问题就解决了。

如果以前编译过项目,为了要重新生成AndroidManifest.xml文件,你可以Clear项目,也可以手工把生成过的AndroidManifest.xml删除,这个文件在Android\Release文件夹中。手工删除,会减少编译的时间。

这一步也非常重要,我就遇到不重新生成AndroidManifest.xml的问题。

关于原理,下面这篇文章写的非常好,感兴趣可以参考:

https://blog.csdn.net/gengkui9897/article/details/82863966

最后,感谢ChinaCock作者提醒我参考他写的视频播放Demo app,里面就是这样实现的。

如果你不知道ChinaCock是什么?可以看我写过的对ChinaCock组件使用说明的文章,也可以加入他的官方群223717588去进一步了解。如果没项目,没钱,就不用去了,没有免费版本来学习。

后记:高勇针对上面的实现,给了更简单的实现方法,以下为他写的原文:

解决安卓9不让客户端通过非https方式访问服务端数据(不允许发送明文http请求)的问题。

1、选择安卓平台编译一次程序,在项目根目录下会生成如下文件AndroidManifest.template.xml
2、打开此文件,在正确位置加上以下权限即可:android:usesCleartextTraffic="true"

类似如下:

<application android:persistent="%persistent%"
android:restoreAnyVersion="%restoreAnyVersion%"
android:label="%label%"
android:debuggable="%debuggable%"
android:largeHeap="%largeHeap%"
android:icon="%icon%"
android:theme="%theme%"
android:hardwareAccelerated="%hardwareAccelerated%" android:usesCleartextTraffic="true" android:resizeableActivity="false">

直接在AndroidManifest.template.xml中定义使用http访问,确实简单!

下面这篇文章,分析更透,可以进一步参考学习:

源码分析 Android 9.0 http请求适配原理

解决android 9上无法使用http协议的更多相关文章

  1. delphi 解决android 9上无法使用http协议

    delphi 解决android 9上无法使用http协议 安卓9不让客户端通过非https方式访问服务端数据(不允许发送明文http请求)的问题. 解决方法: 1.选择安卓平台编译一次程序,在项目根 ...

  2. HTML实现点击时的阴影(:active)(已解决iOS微信上无法使用)

    一般是用这个委类:active 参考:http://www.w3school.com.cn/cssref/selector_active.asp 但是业界上实现的效果中,今日头条的手机端网页却不是这样 ...

  3. 解决android studio上“com.android.dex.DexIndexOverflowException: method ID not in [0, 0xffff]: 65935”问题

    我是在更换应用的一个jar包时发生的这个错误,网上查到说是因为同时在工程中引入了多个第三方jar包,导致调用的方法数超过了android设定的65935个(DEX 64K problem),进而导致d ...

  4. (转) Android平台上关于IM的实践总结

    前言 IM通信在互联网发展到现在已经是码农的世界里人尽皆知的技术,特别在当下移动互联网迅猛发展的时代这种技术的开发也更加火热,其中老牌的代表作就有QQ和MSN,和最近新崛起的微信,默默,易信,来往等眼 ...

  5. android-解决 Android N 上 报错:android.os.FileUriExposedException

    解决 Android N 上 安装Apk时报错:android.os.FileUriExposedException: file:///storage/emulated/0/Download/appN ...

  6. 开发中,android手机WIFI无法使用,无SIM卡故障解决

    用eclipse 开发android中,突然出现,android手机WIFI无法使用,无SIM卡故障解决 发现故障后,想办法刷机(没有成功),触点清洁都搞了. 最后恢复出厂设置居然解决了,留资料给同行 ...

  7. android 解决小米手机上选择照片路径为null情况

    昨天测试帅哥说他手机选择图库崩溃了,这是一个上传头像的功能,相信很多应用都有这个功能,于是我就把手机拿过来打log看了下返回的路径 为null,在网上搜索了下解决方案,现在把解决方案记录下: 这是在o ...

  8. 理解WebKit和Chromium: 调试Android系统上的Chromium

    转载请注明原文地址:http://blog.csdn.net/milado_nju 1. Android上的调试技术 在Android系统上,开发人员能够使用两种不同的语言来开发应用程序,一种是Jav ...

  9. Android github上的好的开源项目汇总

    转自:http://blog.csdn.net/ithomer/article/details/8882236 GitHub 上的开源项目不胜枚举,越来越多的开源项目正在迁移到GitHub平台上.基于 ...

随机推荐

  1. DataTable插件 后台分页 (服务器端分页)

    <script type="text/javascript">        var persontable; var personQueryCondition = { ...

  2. Linux+Jenkins环境搭建

    一.安装基础环境 1. yum -y install java-1.8.0-openjdk.x86_64 #安装1.8jdk 2. 查看java 版本 [root@localhost djanggo_ ...

  3. CNN - 卷积神经网络

    例:  卷积公式: 卷积和卷积没有什么特别的关系,只是计算步骤比较像,成为卷积神经网络名字的由来. 感受野:单个感觉神经元的感受野是感觉空间的特定区域(如体表或视野),在这个区域内,刺激会改变神经元的 ...

  4. LSTMs 长短期记忆网络系列

    RNN的长期依赖问题 什么是长期依赖? 长期依赖是指当前系统的状态,可能受很长时间之前系统状态的影响,是RNN中无法解决的一个问题. 如果从(1) “ 这块冰糖味道真?”来预测下一个词,是很容易得出“ ...

  5. Luogu P1892 P1525 团伙 关押罪犯

    (怎么都是抓罪犯 怪不得写法差不多) 团伙 关押罪犯 并查集.以"敌人的敌人是朋友"的思路来处理.所以增加一个e/E数组来存储敌人. 关押罪犯还用到了贪心的思路.将冲突值从大到小排 ...

  6. Docker Kubernetes 查询字段说明

    Docker Kubernetes  查询字段说明 # 打印受支持的API版本 kubectl api-versions # 扩展 apiextensions.k8s.io/v1beta1 # 注册 ...

  7. Tomcat基本

    Tomcat web 应用服务器基础 jdk+tomcat安装 1.运行Tomcat为什么要装jdk? http://blog.sina.com.cn/s/blog_753bc97d0102w5rd. ...

  8. D4 树的直径、重心以及基环树

    第一题第二题鉴上我前几篇博客poj1985 poj1849:https://www.cnblogs.com/Tyouchie/p/10384379.html 第三题:数的重心:poj1655 来自sj ...

  9. 剑指offer(12)数值的整数次方

    题目描述 给定一个double类型的浮点数base和int类型的整数exponent.求base的exponent次方. 题目分析 这道题用传统的方法也可以做,只不过效率太低,这里我们用到快速幂的方法 ...

  10. 【java】J2EE、J2SE和J2ME的区别

    本文向大家简单介绍一下J2EE.J2SE.J2ME概念及区别,J2EE,J2SE,J2ME是java针对不同的的使用来提供不同的服务,也就是提供不同类型的类库. Java2平台包括:标准版(J2SE) ...