前几天忽然收到反馈说app在Android P上有问题,而后我查看了错误日志和各类文档终于找到了问题php
Android P官方适配文档:developer.android.google.cn/about/versi…android
百度地图Android 地图SDK:lbsyun.baidu.com/index.php?t…安全
由于我把targetSdkVersion 更新到了28。 因为app集成的百度地图的SDK是默认使用的http协议 可是因为在Android P(或更高版本中)系统是禁止使用全部的未加密的连接的; 因此在时用检索功能出现了这个错误bash
“HttpClient: Catch connection exception, INNER_ERROR”网络
这就是由于使用了Http协议来进行请求连接被系统给禁止了。app
找到问题所在就知道怎么解决了 百度地图的官方文档已经给出了解决方案: (1)在初始化时设置使用Https请求(这是百度地图官方推荐的):ide
// 在使用 SDK 各组间以前初始化 context 信息,传入 ApplicationContext
SDKInitializer.initialize(this);
//自4.3.0起,百度地图SDK全部接口均支持百度坐标和国测局坐标,用此方法设置您使用的坐标类型.
//包括BD09LL和GCJ02两种坐标,默认是BD09LL坐标。
SDKInitializer.setCoordType(CoordType.BD09LL);
//设置使用https请求
SDKInitializer.setHttpsEnable(true);
复制代码
这样就能够解决这个问题了ui
(2)就是把targetSdkVersion降到27如下(包含);this
(3)更改网络安全的配置以下:google
1.在res文件下建立一个xml文件夹,而后建立一个network_security_config.xml文件,文件内容以下:
复制代码
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<base-config cleartextTrafficPermitted="true" />
</network-security-config>
复制代码
2.接着,在AndroidManifest.xml文件下的application标签增长如下属性:
复制代码
<application
...
android:networkSecurityConfig="@xml/network_security_config"
...
/>
复制代码
这是设置容许明文链接。
这三种方式都解决了咱们的问题, 推荐是用第一种方式,不过第一种方式因为是用了Https,因此会存在加密和解密的过程,可能会影响效率。