前幾天忽然收到反饋說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,因此會存在加密和解密的過程,可能會影響效率。