91 lines
3.8 KiB
Java
91 lines
3.8 KiB
Java
package com.aoleyun.sn.manager;
|
||
|
||
import android.content.Context;
|
||
import android.util.Log;
|
||
|
||
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.aoleyun.sn.utils.SPUtils;
|
||
|
||
public class AmapManager {
|
||
private static AmapManager sInstance;
|
||
private Context mContext;
|
||
public static AMapLocationClient locationClient = null;
|
||
private String TAG = AmapManager.class.getSimpleName();
|
||
|
||
private AmapManager(Context context) {
|
||
this.mContext = context;
|
||
}
|
||
|
||
public static void init(Context context) {
|
||
if (sInstance == null) {
|
||
sInstance = new AmapManager(context);
|
||
}
|
||
|
||
}
|
||
|
||
public static AmapManager getInstance() {
|
||
if (sInstance == null) {
|
||
throw new IllegalStateException("You must be init AmapManager first");
|
||
}
|
||
|
||
return sInstance;
|
||
}
|
||
|
||
public AMapLocationClient getLocationClient() {
|
||
if (null == locationClient) {
|
||
initAmap();
|
||
}
|
||
return locationClient;
|
||
}
|
||
|
||
public void initAmap() {
|
||
locationClient = new AMapLocationClient(mContext);
|
||
AMapLocationClientOption option = new AMapLocationClientOption();
|
||
option.setLocationPurpose(AMapLocationClientOption.AMapLocationPurpose.SignIn);
|
||
option.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy);
|
||
option.setNeedAddress(true);
|
||
//获取一次定位结果:
|
||
//该方法默认为false。
|
||
option.setOnceLocation(true);
|
||
//获取最近3s内精度最高的一次定位结果:
|
||
//设置setOnceLocationLatest(boolean b)接口为true,启动定位时SDK会返回最近3s内精度最高的一次定位结果。
|
||
// 如果设置其为true,setOnceLocation(boolean b)接口也会被设置为true,反之不会,默认为false。
|
||
option.setOnceLocationLatest(true);
|
||
locationClient.setLocationOption(option);
|
||
//设置定位模式为AMapLocationMode.Hight_Accuracy,高精度模式。
|
||
//设置定位监听
|
||
locationClient.setLocationListener(new AMapLocationListener() {
|
||
|
||
@Override
|
||
public void onLocationChanged(AMapLocation aMapLocation) {
|
||
StringBuilder sb = new StringBuilder();
|
||
//errCode等于0代表定位成功,其他的为定位失败,具体的可以参照官网定位错误码说明
|
||
if (aMapLocation.getErrorCode() == 0) {
|
||
Log.e(TAG, "onLocationChanged: " + "定位成功");
|
||
Log.e(TAG, "onLocationChanged: " + aMapLocation.getAddress());
|
||
sb.append(aMapLocation.getAddress()).append("\n");
|
||
SPUtils.put(mContext, "AmapAddress", aMapLocation.getAddress());
|
||
SPUtils.put(mContext, "longitude", aMapLocation.getLongitude());
|
||
SPUtils.put(mContext, "latitude", aMapLocation.getLatitude());
|
||
SPUtils.put(mContext, "AmapError", "");
|
||
} else {
|
||
//定位失败
|
||
sb.append("定位失败" + "\n");
|
||
Log.e(TAG, "onLocationChanged: " + "定位失败");
|
||
SPUtils.put(mContext, "AmapError", String.valueOf(aMapLocation.getErrorInfo()));
|
||
}
|
||
Log.e(TAG, (String) SPUtils.get(mContext, "AmapAddress", "-"));
|
||
Log.e(TAG, (String) SPUtils.get(mContext, "AmapError", "-"));
|
||
Log.e(TAG, "amap: " + sb.toString());
|
||
}
|
||
});
|
||
//设置场景模式后最好调用一次stop,再调用start以保证场景模式生效
|
||
locationClient.stopLocation();
|
||
locationClient.startLocation();
|
||
Log.e(TAG, "initAmap: " + "startLocation");
|
||
}
|
||
}
|