適配Android P(9.0)的問題 (百度地圖)HttpClient: Catch connection exception, INNER_ERROR

醉過才知酒濃發表於2018-11-27

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

相關文章