踩坑集锦2
这个问题在百度地图官网有讲到:http://lbsyun.baidu.com/index.php?title=androidsdk/guide/create-project/attention
支持HTTPS
地图SDK自v4.5.0起支持HTTPS协议,开发者可以通过setHttpsEnable(boolean isEnable);控制是否使用https,V5.3.2版本之前版本默认使用http协议;**V5.3.2版本之后(包含)默认使用https协议。
如果使用默认的http协议,由于Android P(包含更高版本)系统禁止使用所有未加密的连接,所以在使用检索功能(poi检索,路线规划,行政区域检索,地理编码,逆地理编码)会返回error.SEARCH_SERVER_INTERNAL_ERROR。**并有如下异常信息:
W/System.err: java.io.IOException: Cleartext HTTP traffic to **** not permitted
E/HttpClient: Catch connection exception, INNER_ERROR
针对该问题有以下三种解决方案如下:
- 初始化时改用https请求(建议);
- targetSdkVersion 降到27以下;
- 按如下方式更改网络安全配置
第一种解决方法
初始化时改用https请求(建议)
// 在使用 SDK 各组间之前初始化 context 信息,传入 ApplicationContext
SDKInitializer.initialize(this);
//自4.3.0起,百度地图SDK所有接口均支持百度坐标和国测局坐标,用此方法设置您使用的坐标类型.
//包括BD09LL和GCJ02两种坐标,默认是BD09LL坐标。
SDKInitializer.setCoordType(CoordType.BD09LL);
//设置使用https请求
SDKInitializer.setHttpsEnable(true);
注意这是在onCreate方法中
正常是已经添加了initialize和setCoordType,只需要添加SDKInitializer.setHttpsEnable(true);就OK了。
推荐这种方法,简单,明确
第二种解决方法
将targetSdkVersion 降到27以下;在app目录下的build-gradle中修改。如图:
修改这个不推荐
第三种解决方法
在res文件夹下创建一个xml文件夹,然后创建一个network_security_config.xml文件,文件内容如下:
<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
<base-config cleartextTrafficPermitted="true" />
</network-security-config>
在AndroidManifest.xml文件下的application标签增加以下属性:
<application
...
android:networkSecurityConfig="@xml/network_security_config"
...
/>
注意:使用https,会存在加密、解密的过程,可能会影响效率。