用户反应本来好用的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. 校验input 修改当前值的校验获取值方式

    <input style="height: 18px; width: 90px;" name="nowQty" value="${ad.nowQ ...

  2. IE缓存清除

    原文转载自:http://blog.csdn.net/whatday/article/details/7566925 首先: 在  stdafx.h中要加入: #include "atlba ...

  3. django+nginx+python3 生产环境部署

    一.安装python基础环境 1.安装各类基础模块 yum install  gcc-c++ wget openssl-devel bzip2-devel expat-devel gdbm-devel ...

  4. LeetCode #001# Two Sum(js描述)

    索引 思路1:暴力搜索 思路2:聪明一点的搜索 思路3:利用HashMap巧解 问题描述:https://leetcode.com/problems/two-sum/ 思路1:暴力搜索 一个很自然的想 ...

  5. Dart编程语言入门

    Dart基础入门语法介绍,详细说明可以查看相关视频<Dart编程语言入门>. 变量与常量 变量 1.使用 var 声明变量,默认值为 null var a;//null a = 10; 2 ...

  6. 剑指offer(29)最小的K个数

    题目描述 输入n个整数,找出其中最小的K个数.例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,. 题目分析 这题有两种方法来做. 第一种就是基于partition的 ...

  7. AndroBench手机性能测试【转】

    本文转载自:https://www.cnblogs.com/jiangzhishan/archive/2018/07/16/9316279.html AndroBench是一个基准测试应用程序,可以衡 ...

  8. linux基础之用户和组管理及权限

    一.用户和组管理 相关配置文件 /etc/passwd: 用户名 : 密码占位符 : UID : GID : COMMENTS : 家目录 :默认shell /etc/group: 组名 : 组密码占 ...

  9. NOI 2017 整数(线段树)

    题意 https://loj.ac/problem/2302 思路 拆分成每个二进制位的加减来考虑,维护那个整数的二进制位.不难发现,进位就是找右边第一个 \(0\) 的位置,并将其赋值为 \(1\) ...

  10. java servlet练习测试

    步骤: 0.首先创建web project,工程名:test_servlet 1.编写Servlet,TestServlet.java文件内容: package com.ouyang.servlet; ...