uni-app 调用安卓 高德sdk获取经纬度(替代 uni.getLocation)
生活随笔
收集整理的這篇文章主要介紹了
uni-app 调用安卓 高德sdk获取经纬度(替代 uni.getLocation)
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
因為項目需要用到精確打卡,所以一兩秒就要更新一次經(jīng)緯度,uni-app 按照官方接了離線安卓高德sdk(鏈接:高德sdk 離線鏈接) 用 uni.getLocation 獲取到的經(jīng)緯度是蠻準的,有六位小數(shù),但是拿著手機走一段距離,居然要二三十秒才會變經(jīng)緯度(吐了)
用了多個手機測試也是一樣,最后想到了 用uni-app 直接調(diào)用安卓 高德sdk 直接獲取經(jīng)緯度
?
下面直接貼目錄結(jié)構(gòu)和代碼了,(前提是你按照上面 高德sdk離線鏈接步驟引入 arr包)
1:在下圖目錄 創(chuàng)建你的java class
?
下面是我的代碼。com.example.myapplication 為我的安卓包名,你們要改為自己的包名
我的代碼參考的是?高德定位數(shù)據(jù)
package com.example.myapplication;import com.amap.api.location.AMapLocation; import com.amap.api.location.AMapLocationClient; import com.amap.api.location.AMapLocationClientOption; import com.amap.api.location.AMapLocationClientOption.AMapLocationMode; import com.amap.api.location.AMapLocationListener;import android.util.Log;import static io.dcloud.common.util.ReflectUtils.getApplicationContext;public class LocationMy{//聲明AMapLocationClient類對象public AMapLocationClient mLocationClient = null;// 這個方法初始化一次就行了public void startMy() {//初始化定位mLocationClient = new AMapLocationClient(getApplicationContext());//設(shè)置定位回調(diào)監(jiān)聽mLocationClient.setLocationListener(mLocationListener);//初始化AMapLocationClientOption對象mLocationOption = new AMapLocationClientOption();//設(shè)置定位模式為AMapLocationMode.Battery_Saving,高精度模式。mLocationOption.setLocationMode(AMapLocationMode.Hight_Accuracy);//設(shè)置定位間隔,單位毫秒,默認為2000ms,最低1000ms。mLocationOption.setInterval(1000);//單位是毫秒,默認30000毫秒,建議超時時間不要低于8000毫秒。mLocationOption.setHttpTimeOut(20000);//給定位客戶端對象設(shè)置定位參數(shù)mLocationClient.setLocationOption(mLocationOption);//啟動定位mLocationClient.startLocation();Log.e("aaa","aaaa");}// 返回當前位置的經(jīng)緯度static double lng = 1.1;static double lat = 1.1;public double rLng(){return lng;}public double rLat(){return lat;}//聲明定位回調(diào)監(jiān)聽器public AMapLocationListener mLocationListener = new AMapLocationListener(){public void onLocationChanged(AMapLocation amapLocation) {Log.e("take","caijielong");// TODO Auto-generated method stubif (amapLocation != null) {int mycode = amapLocation.getErrorCode();Log.e("myCode",String.valueOf(mycode));if (amapLocation.getErrorCode() == 0) {//可在其中解析amapLocation獲取相應(yīng)內(nèi)容。double locationType = amapLocation.getLocationType();//獲取當前定位結(jié)果來源,如網(wǎng)絡(luò)定位結(jié)果,詳見定位類型表double latitude = amapLocation.getLatitude();//獲取緯度double longitude = amapLocation.getLongitude();//獲取緯度Log.e("Amap==經(jīng)度:緯度", "locationType:"+locationType+",latitude:"+latitude);lat = latitude;lng = longitude;}else {//定位失敗時,可通過ErrCode(錯誤碼)信息來確定失敗的原因,errInfo是錯誤信息,詳見錯誤碼表。//todo mycode 為12時,為缺少定位權(quán)限,mycode要傳到uni-app 提醒用戶開啟權(quán)限 具體錯誤碼:https://lbs.amap.com/api/android-location-sdk/guide/utilities/errorcode/}}}};//聲明AMapLocationClientOption對象public AMapLocationClientOption mLocationOption = null;}?
2: uni-app 前端調(diào)用
// com.example.myapplication 為安卓包名,LocationMy 為java class名 var LocationMy = plus.android.importClass("com.example.myapplication.LocationMy") var LocationMy = new LocationMy(); LocationMy.startMy(); // 這個方法一定要執(zhí)行一次就行了//下面兩個即為 安卓 高德sdk的經(jīng)緯度 LocationMy.rLng(); LocationMy.rLat();調(diào)用成功 end~? 隔一秒輸出經(jīng)緯度 nice
有不懂的可以底下評論問我,一起研究~~
?
順便貼下? ?uni-app 調(diào)用安卓原生方法代碼
總結(jié)
以上是生活随笔為你收集整理的uni-app 调用安卓 高德sdk获取经纬度(替代 uni.getLocation)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: tomcat7安装详细过程
- 下一篇: 高德地图使用——定位功能