博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
高德地图定位工具类
阅读量:6288 次
发布时间:2019-06-22

本文共 3813 字,大约阅读时间需要 12 分钟。

引言

定位功能初始化设置时耗时较多,如果放在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;            }        });

结束语

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

转载地址:http://bzuta.baihongyu.com/

你可能感兴趣的文章
Spring Boot Unregistering JMX-exposed beans on shutdown
查看>>
poi 导入导出的api说明(大全)
查看>>
Mono for Android 优势与劣势
查看>>
将图片转成base64字符串并在JSP页面显示的Java代码
查看>>
js 面试题
查看>>
sqoop数据迁移(基于Hadoop和关系数据库服务器之间传送数据)
查看>>
腾讯云下安装 nodejs + 实现 Nginx 反向代理
查看>>
Javascript 中的 Array 操作
查看>>
java中包容易出现的错误及权限问题
查看>>
AngularJS之初级Route【一】(六)
查看>>
服务器硬件问题整理的一点总结
查看>>
SAP S/4HANA Cloud: Revolutionizing the Next Generation of Cloud ERP
查看>>
Mellanox公司计划利用系统芯片提升存储产品速度
查看>>
白帽子守护网络安全,高薪酬成大学生就业首选!
查看>>
ARM想将芯片装进人类大脑 降低能耗是一大挑战
查看>>
Oracle数据库的备份方法
查看>>
Selenium 自动登录考勤系统
查看>>
关于如何以编程的方式执行TestNG
查看>>
智能照明造福千家万户 家居智能不再是梦
查看>>
物联网如何跳出“看起来很美”?
查看>>