package com.streamlet.common.util;
import com.amap.api.location.AMapLocation;
import com.amap.api.location.AMapLocationClient;
import com.amap.api.location.AMapLocationClientOption;
import com.amap.api.location.AMapLocationListener;
import com.amap.api.maps.AMapUtils;
import com.amap.api.maps.model.LatLng;
import com.streamlet.appui.base.BaseActivity;
/**
* Created by streamlet2 on 2016/10/21.
*
* @Description 高德地图工具类
*/
public class MapUtils implements AMapLocationListener {
private BaseActivity activity;
private AMapLocationClientOption mLocationOption;
private AMapLocationClient aMapLocationClient;
private static MapUtils instance;
private MapUtils(BaseActivity activity) {
this.activity = activity;
initLocation();
}
public static MapUtils getInstance(BaseActivity activity) {
if (instance == null) {
synchronized (MapUtils.class){
if (instance==null)
instance=new MapUtils(activity);
}
}
return instance;
}
/**
* 配置定位信息
*/
private void initLocation() {
mLocationOption = new AMapLocationClientOption();
//初始化定位
aMapLocationClient = new AMapLocationClient(activity);
//设置定位模式为高精度模式,Battery_Saving为低功耗模式,Device_Sensors是仅设备模式
mLocationOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy);
//设置定位参数
aMapLocationClient.setLocationOption(mLocationOption);
//设置是否返回地址信息(默认返回地址信息)
mLocationOption.setNeedAddress(true);
//设置是否只定位一次,默认为false
mLocationOption.setOnceLocation(true);
//设置定位监听
aMapLocationClient.setLocationListener(this);
}
//定位成功
@Override
public void onLocationChanged(AMapLocation aMapLocation) {
if (aMapLocation != null && aMapLocation.getErrorCode() == 0) {
if (mLocationCallBack != null)
mLocationCallBack.onLocationSuccess(aMapLocation);
} else {
mLocationCallBack.onLocationFailed(aMapLocation == null ? "定位失败:未知错误" : "定位失败" + aMapLocation.getErrorCode() + ":" + aMapLocation.getErrorInfo());
}
aMapLocationClient.stopLocation();
}
/**启动定位,每次启动只定位一次。再次定位需要重新调用*/
public void startLocation(){
if (aMapLocationClient == null) {
initLocation();
}
aMapLocationClient.startLocation();
}
/**定位结果回调接口*/
public interface LocationCallBack {
public void onLocationSuccess(AMapLocation aMapLocation);
public void onLocationFailed(String errorCode);
}
private LocationCallBack mLocationCallBack;
public void setLocationCallBack(LocationCallBack mLocationCallBack) {
this.mLocationCallBack = mLocationCallBack;
}
/**根据经纬度计算两点的距离*/
public float caculateDistance(LatLng startLatlng,LatLng endLatlng){
return AMapUtils.calculateLineDistance(startLatlng,endLatlng);
}
}