项目中需要定位功能,一开始使用了cordova-plugin-geolocation插件,但是报错了而且这个插件返回的是经纬度,没有街道信息,想要街道信息的话需要通过其他的API来转换。
然后又找了找,发现了百度的SDK
所用插件:cordova-plugin-baidumaplocation
上百度sdk申请android和ios(必须)的AK
包名在android目录下的AndroidManifest.xml文件中(package)
发布版的sha1获取:
需要jdk的keytool工具,路径配置在环境变量的path后用逗号隔开,就可以在全局的cmd中用了
keytool -genkey -v -keystore my-release-key.keystore -alias alias_name -keyalg RSA -keysize 2048 -validity 10000
执行上述命令后,会在项目目录下生成一个my-release-key.keystore文件
再执行 keytool -list -v -keystore my-release-key.keystore 输入口令后会打印出
这里的sha1,就是发布版的sha1。到这android的ak就配置完了,ios的随便整一个。
插件下载:
Ionic cordova plugin add cordova-plugin-baidumaplocation --variable ANDROID_KEY="***" --variable IOS_KEY="***"
然后打包:
ionic cordova build android --release
然后签名:
jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore my-release-key.keystore
F:/code/ionic_bd/platforms/android/build/outputs/apk/release/android-release-unsigned.apk
alias_name
因为我不会取开发版的sha1所以只有签名后的apk才能正常定位
核心代码:
在顶端声明:declare const baidumap_location: any;
if (typeof baidumap_location === “undefined”)
{
alert(“baidumap_location is undefined”);
return;
};
baidumap_location.getCurrentPosition(function
(result) {
alert(JSON.stringify(result, null, 4));
}, function (error) {
alert(error);
});
只在手机上好用,在浏览器会报undefined
提示:
中间遇到的坑
Android版本@7.0.0 插件版本@4.0.1
定位5e-324,返回的对象会报错,如下:
NetWork location failed because baidu
location service can not decrypt the request query, please check the so file !(原因不知道)
Android版本@6.4.0 插件版本@4.0.1
baidumap_location.getCurrentPosition()方法啥都没有,原因也不知道。
虽然原因不知道(听说是版本问题),但是有解决办法,什么办法呢?
就是降版本
Android版本@6.4.0 插件版本@3.2.0
一切正常