折騰了一晚上的安卓端高德定位獲取經緯度,剛剛搞定,差點氣的抓狂,第三方包的報錯信息不夠友好,導致一直沒找到錯誤點。
引入了第三方包react-native-amap-geolocation
import { PermissionsAndroid } from "react-native";
import { init, Geolocation } from "react-native-amap-geolocation";
// 對於 Android 需要自行根據需要申請權限
await PermissionsAndroid.request(PermissionsAndroid.PERMISSIONS.ACCESS_COARSE_LOCATION);
// 使用自己申請的高德 App Key 進行初始化
await init({
ios: "9bd6c82e77583020a73ef1af59d0c759",
android: "043b24fe18785f33c491705ffe5b6935"
});
Geolocation.getCurrentPosition(({ coords }) => {
console.log(coords);
});
一開始由於默認下最新包,然後自動下了包版本1.02,調定位一直報錯error is not a function,看了下作者的release發佈日子,才更到1.01,怕是見了鬼一樣的坑我,果斷降包指定到1.01。調用沒報錯,然後返回結果如下圖,找不到正確的定位結果。
多次試驗,仔細覈對了配置,都沒找到問題。然後嘗試了連續定位,發現了錯誤信息
import { init, addLocationListener, start, stop } from "react-native-amap-geolocation";
// 對於 Android 需要自行根據需要申請權限
await PermissionsAndroid.request(PermissionsAndroid.PERMISSIONS.ACCESS_COARSE_LOCATION);
// 使用自己申請的高德 App Key 進行初始化
await init({
ios: "9bd6c82e77583020a73ef1af59d0c759",
android: "043b24fe18785f33c491705ffe5b6935"
});
// 添加定位監聽函數
addLocationListener(location => console.log(location));
// 開始連續定位
start();
// 在不需要的時候停止定位
stop();
"KEY錯誤 請到http://lbs.amap.com/api/android-location-sdk/guide/utilities/errorcode/查看錯誤碼說明,錯誤詳細信息:auth "
確認自己在高德開放平臺創建的應用,key值填寫是正確的,後來發現原因是未填寫調試版安全碼SHA1,高德官方文檔只表明發佈版必填,調試版選填。調試階段默認未走自己生成的簽名打包處理,而是走的dubugger簽名文件打包編譯,通過以下命令拿到了調試版安全碼SHA1,正確得到了定位信息。
keytool -v -list -keystore ~/.android/debug.keystore
(PS: 參考文章https://www.jianshu.com/p/dcfca6041154)
之後調整ios端發現一個問題,拿到的結果值內不包含地址信息,查了下包的issues和高德文檔,看到ios默認不返回逆地理信息,默認,需要添加配置。
添加 _manager.locatingWithReGeocode = YES 到 ios/Libraries/AMapGeolocation.xcodeproj/AMapGeolocation.m 內
if (!_manager) {
// XXXXXXXX;
// Xxxxxxxx;
_manager.locatingWithReGeocode = YES;
}