前幾天突然收到反饋說app在Android P上有問題,然後我檢視了錯誤日誌和各種文件終於找到了問題
Android P官方適配文件:developer.android.google.cn/about/versi…
百度地圖Android 地圖SDK:lbsyun.baidu.com/index.php?t…
因為我把targetSdkVersion 更新到了28。 由於app整合的百度地圖的SDK是預設使用的http協議 但是由於在Android P(或更高版本中)系統是禁止使用所有的未加密的連結的; 所以在時用檢索功能出現了這個錯誤
“HttpClient: Catch connection exception, INNER_ERROR”
這就是因為使用了Http協議來進行請求連結被系統給禁止了。
找到問題所在就知道怎麼解決了 百度地圖的官方文件已經給出瞭解決方案: (1)在初始化時設定使用Https請求(這是百度地圖官方推薦的):
// 在使用 SDK 各組間之前初始化 context 資訊,傳入 ApplicationContext
SDKInitializer.initialize(this);
//自4.3.0起,百度地圖SDK所有介面均支援百度座標和國測局座標,用此方法設定您使用的座標型別.
//包括BD09LL和GCJ02兩種座標,預設是BD09LL座標。
SDKInitializer.setCoordType(CoordType.BD09LL);
//設定使用https請求
SDKInitializer.setHttpsEnable(true);
複製程式碼
這樣就可以解決這個問題了
(2)就是把targetSdkVersion降到27以下(包含);
(3)更改網路安全的配置如下:
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,所以會存在加密和解密的過程,可能會影響效率。