适配Android P(9.0)的问题 (百度地图)HttpClient: Catch connection exception, INNER_ERROR

前几天忽然收到反馈说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,因此会存在加密和解密的过程,可能会影响效率。

相关文章
相关标签/搜索