//定位工具类 public class LocationUtil { //声明mlocationClient对象 public static LocationUtil mLocationUtil; public AMapLocationClient mlocationClient; Context mContext; LocationLister mLocationLister; private LocationUtil(Context mContext){ this. mContext = mContext; } //定位监听接口 public interface LocationLister { void OnLocationComplete(); void OnLocationError(int errorCode , String errorMessage); } public void setOnLocationLister( LocationLister mLocationLister){ this.mLocationLister = mLocationLister; } public static LocationUtil initLoaction(Context mContext){ if (mLocationUtil == null){ synchronized (LocationUtil.class){ if(mLocationUtil == null ){ mLocationUtil= new LocationUtil(mContext); } } } return mLocationUtil; } //开始定位 public void startLocation(){ mlocationClient = new AMapLocationClient(mContext); //设置定位监听 mlocationClient.setLocationListener(locationListener); //设置定位参数 mlocationClient.setLocationOption(mClientOption()); // 此方法为每隔固定时间会发起一次定位请求,为了减少电量消耗或网络流量消耗, // 注意设置合适的定位时间的间隔(最小间隔支持为1000ms),并且在合适时间调用stopLocation()方法来取消定位请求 // 在定位结束后,在合适的生命周期调用onDestroy()方法 // 在单次定位情况下,定位无论成功与否,都无需调用stopLocation()方法移除请求,定位sdk内部会移除 //启动定位 mlocationClient.startLocation(); DLOG.e("Location-----startLocation"); } //设置定位参数 private AMapLocationClientOption mClientOption(){ //初始化定位参数 AMapLocationClientOption mLocationOption = new AMapLocationClientOption(); //设置定位模式为高精度模式,Battery_Saving为低功耗模式,Device_Sensors是仅设备模式 mLocationOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy); //设置定位间隔,单位毫秒,默认为2000ms mLocationOption.setInterval(2000); return mLocationOption; } //定位监听 AMapLocationListener locationListener = new AMapLocationListener() { @Override public void onLocationChanged(AMapLocation aMapLocation) { DLOG.e("Location-----amapLocation"+"" + aMapLocation.getLatitude()+"======" + aMapLocation.getLongitude()); if (aMapLocation != null) { if (aMapLocation.getErrorCode() == 0) { //定位成功回调信息,设置相关消息 double latitude = aMapLocation.getLatitude();//获取纬度 double longitude = aMapLocation.getLongitude();//获取经度 DLOG.e("Location-----OnLocationLister"+"" + latitude+"======" + longitude); mLocationLister.OnLocationComplete(); } else { mLocationLister. OnLocationError(aMapLocation.getErrorCode(),aMapLocation.getErrorInfo().toString()); //显示错误信息ErrCode是错误码,errInfo是错误信息,详见错误码表。 } } } }; //结束定位 public void destoryLocation(){ DLOG.e("Location-----onDestroy -- "+mlocationClient); if(mlocationClient!=null){ DLOG.e("Location-----onDestroy"); mlocationClient.onDestroy(); } } }
activity 使用
//开启定位 LocationUtil.initLoaction(GameVideoApplication.instance).startLocation();
//监听定位
LocationUtil.initLoaction(Application.instance).setOnLocationLister(new LocationUtil.LocationLister() { @Override public void OnLocationComplete() { //获取到经纬度 停止定位 DLOG.e("Location-----OnLocationLister"+"destoryLocation" ); LocationUtil.initLoaction(Application.instance).destoryLocation(); } @Override public void OnLocationError(int errorCode, String errorMessage) { DLOG.e("Location-----errorCode"+errorCode+" "+errorMessage ); //获取到经纬度失败 停止定位 LocationUtil.initLoaction(Application.instance).destoryLocation(); } });