展示圖.png
進入高德地圖開放平臺注冊賬號,創建應用。
注冊創建應用之后為應用添加key值。
在應用中導入高德地圖的第三方SDK,配置清單文件(注:為了適配Android6.0以上機型,需要使用動態權限申請)。
針對以上步驟高德開放平臺中有詳細的說明,下面是配置代碼。
- 聲明AMapLocationClient對象和AMapLocationClientOption對象
//聲明AMapLocationClient類對象
public AMapLocationClient mLocationClient = null;
//聲明AMapLocationClientOption對象
public AMapLocationClientOption mLocationOption = null;
public void getUserPoint() {
//聲明mLocationOption對象
mLocationClient = new AMapLocationClient(this);
//初始化定位參數
mLocationOption = new AMapLocationClientOption();
//設置單次定位
mLocationOption.setOnceLocation(true);
//獲取最近3s內精度最高的一次定位結果:
//設置setOnceLocationLatest(boolean b)接口為true,啟動定位時SDK會返回最近3s內精度最高的一次定位結果。如果設置其為true,setOnceLocation(boolean b)接口也會被設置為true,反之不會,默認為false。
mLocationOption.setOnceLocationLatest(true);
//設置定位監聽
mLocationClient.setLocationListener(this);
//設置定位模式為高精度模式,Battery_Saving為低功耗模式,Device_Sensors是僅設備模式
mLocationOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy);
//設置定位間隔,單位毫秒,默認為2000ms
mLocationOption.setInterval(2000);
//設置定位參數
mLocationClient.setLocationOption(mLocationOption);
// 此方法為每隔固定時間會發起一次定位請求,為了減少電量消耗或網絡流量消耗,
// 注意設置合適的定位時間的間隔(最小間隔支持為1000ms),并且在合適時間調用stopLocation()方法來取消定位請求
// 在定位結束后,在合適的生命周期調用onDestroy()方法
// 在單次定位情況下,定位無論成功與否,都無需調用stopLocation()方法移除請求,定位sdk內部會移除
//啟動定位
mLocationClient.startLocation();
}
- 配置完成之后設置請求結果回調獲取當前定位的位置詳情。
@Override
public void onLocationChanged(AMapLocation amapLocation){
if (amapLocation != null) {
if (amapLocation.getErrorCode() == 0) {
//定位成功回調信息,設置相關消息
amapLocation.getLocationType();//獲取當前定位結果來源,如網絡定位結果,詳見定位類型表
double latitude = amapLocation.getLatitude();//獲取緯度
double longitude = amapLocation.getLongitude();//獲取經度
mPoint = new DPoint(latitude,longitude);
loadData();//后續操作
} else {
//顯示錯誤信息ErrCode是錯誤碼,errInfo是錯誤信息,詳見錯誤碼表。
Log.e("AmapError", "location Error, ErrCode:"
+ amapLocation.getErrorCode() + ", errInfo:"
+ amapLocation.getErrorInfo());
}
}
}
從上面的方法中我獲取到了當前用戶的位置信息,并從中取出當前經緯度,聲明一個坐標對象,DPoint mPoint = new DPoint(latitude,longitude)。
如果要求出兩點之間的距離,同樣也要將目標位置聲明成一個DPoint對象,然后調用SDK中的方法
CoordinateConverter.calculateLineDistance(userPoint, dPoint);
// userPoint 我的點
// dPoint 目標點
float distance = CoordinateConverter.calculateLineDistance(userPoint, dPoint);
mDistance.setText("距您"+(int) distance + "m");
這樣就能得出自己與目標點間的距離了,更多詳細參數和設置方法可以參考API。
后續我還會分享一下在 Android 6.0 以上如何適配同時動態申請多個權限。