引言
定位功能初始化设置时耗时较多,如果放在Activity中操作,难免会有Activity切换较慢的问题。通过该工具类,可以实现一次初始化,多处随时调用。具有占用资源少,使用方便,便于复用,速度快,可根据不同需求获取不同结果的优点。
正文
1.:
1) 定位jar包;2) Manifest配置。
2.定位工具类代码:
package com.frank.map;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.location.AMapLocationClientOption.AMapLocationMode;import android.content.Context;/** * * @ClassName: GDLocationUtil * @Description: 高德地图定位工具类 * @author frank.fun@qq.com * @date 2017年1月8日 下午1:51:47 * */public class GDLocationUtil { private static AMapLocationClient mlocationClient; public static AMapLocationClientOption mLocationOption = null; public static AMapLocation sLocation = null;/** * * @Title: init * @Description: 初始化地图导航,在Application onCreate中调用,只需调用一次 * @param context */ public static void init(Context context) { // 声明mLocationOption对象 mlocationClient = new AMapLocationClient(context); // 初始化定位参数 mLocationOption = new AMapLocationClientOption(); // 设置定位模式为高精度模式,Battery_Saving为低功耗模式,Device_Sensors是仅设备模式 mLocationOption.setLocationMode(AMapLocationMode.Hight_Accuracy); // 设置定位间隔,单位毫秒,默认为2000ms mLocationOption.setInterval(2000); // 设置定位参数 mlocationClient.setLocationOption(mLocationOption); // 此方法为每隔固定时间会发起一次定位请求,为了减少电量消耗或网络流量消耗, // 注意设置合适的定位时间的间隔(最小间隔支持为2000ms),并且在合适时间调用stopLocation()方法来取消定位请求 // 在定位结束后,在合适的生命周期调用onDestroy()方法 // 在单次定位情况下,定位无论成功与否,都无需调用stopLocation()方法移除请求,定位sdk内部会移除 }/** * * @ClassName: MyLocationListener * @Description: 定位结果回调 * @author frank.fun@qq.com * @date 2017年1月8日 下午1:53:11 * */ public interface MyLocationListener { public void result(AMapLocation location); }/** * * @Title: getLocation * @Description: 获取位置,如果之前获取过定位结果,则不会重复获取 * @param listener */ public static void getLocation(MyLocationListener listener) { if (sLocation == null) { getCurrentLocation(listener); } else { listener.result(sLocation); } }/** * * @Title: getCurrentLocation * @Description: 获取位置,重新发起获取位置请求 * @param listener */ public static void getCurrentLocation(final MyLocationListener listener) { if (mlocationClient==null) { return; } // 设置定位监听 mlocationClient.setLocationListener(new AMapLocationListener() { @Override public void onLocationChanged(AMapLocation location) { if (location != null) { //定位成功,取消定位 mlocationClient.stopLocation(); sLocation=location; listener.result(location); }else { //获取定位数据失败 } } }); // 启动定位 mlocationClient.startLocation(); } /** * * @Title: destroy * @Description: 销毁定位,必须在退出程序时调用,否则定位会发生异常 */ public static void destroy() { mlocationClient.onDestroy(); }}
3.使用方法:
1) 在Application类的onCreate方法中进行初始化:
// 定位工具初始化 GDLocationUtil.init(this);
2) 在需要时调用:
// 获取之前定位位置,如果之前未曾定位,则重新定位 GDLocationUtil.getLocation(new MyLocationListener() { @Override public void result(AMapLocation location) { //针对location进行相关操作,如location.getCity(),无需验证location是否为null; } }); // 获取当前位置,无论是否定位过,重新进行定位 GDLocationUtil.getCurrentLocation(new MyLocationListener() { @Override public void result(AMapLocation location) { //针对location进行相关操作,如location.getCity(),无需验证location是否为null; } });
结束语
通常来说单独的定位功能是用于确定用户所在城市、位置,仅作显示并通过上传位置信息对用户提供相应周边服务用,因此无需重复定位。重复定位耗电量较多且大多无实际作用,因此此处只做单次定位的处理。