android 定位工具类,高德地图定位工具类

引言

定位功能初始化设置时耗时较多,如果放在Activity中操作,难免会有Activity切换较慢的问题。通过该工具类,可以实现一次初始化,多处随时调用。具有占用资源少,使用方便,便于复用,速度快,可根据不同需求获取不同结果的优点。

正文

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;

}

});

结束语

通常来说单独的定位功能是用于确定用户所在城市、位置,仅作显示并通过上传位置信息对用户提供相应周边服务用,因此无需重复定位。重复定位耗电量较多且大多无实际作用,因此此处只做单次定位的处理。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值