资讯专栏INFORMATION COLUMN

Android高德地图定位逻辑优化

MarvinZhang / 1540人阅读

摘要:优化思路将定位逻辑写在中,并提供监听,需要时在其他中调用结果。获取最近内精度最高的一次定位结果设置接口为,启动定位时会返回最近内精度最高的一次定位结果。

优化思路:

将定位逻辑写在Application中,并提供监听,需要时在其他Activity中调用结果。

解决问题:

1.将定位逻辑写在Activity可能存在定位多次初始化、多次请求定位等定位相关逻辑混乱的问题;
2.定位逻辑初始化时的定位设置耗时较多,写在Activity中会导致Activity启动过慢的问题。

基本配置:

见高德配置文档。

具体实现:

源代码:

package com.example.xxx;

import android.app.Application;
import android.content.Context;

import com.amap.api.location.AMapLocation;
import com.amap.api.location.AMapLocationClient;
import com.amap.api.location.AMapLocationClientOption;
import com.amap.api.location.AMapLocationClientOption.AMapLocationMode;
import com.amap.api.location.AMapLocationListener;

public class App extends Application {
    // 声明AMapLocationClient类对象
    public static AMapLocationClient mLocationClient = null;
    // 声明AMapLocationClientOption对象
    public static AMapLocationClientOption mLocationOption = null;
    public static AMapLocation mLoction = null;
    public static Context mContext;

    @Override
    public void onCreate() {
        super.onCreate();
        mContext = this;
    }

    /**
     * 
     * @ClassName: MyLocationListener
     * @Description: 定位回调
     * @author frank.fun@qq.com
     * @date 2016年11月10日 下午2:05:45
     *
     */
    public interface MyLocationListener {
        public void onLocationChanged(AMapLocation location);
    }

    /**
     * 
     * @Title: getLocation
     * @Description: 获取当前地址,不重新获取
     * @param listener
     */
    public static void getLocation(final MyLocationListener listener) {
        if (mLoction != null) {
            listener.onLocationChanged(mLoction);
            return;
        }
        getCurrentLocation(listener);
    }

    /**
     * 
     * @Title: getCurrentLocation
     * @Description: 重新获取当前地址
     * @param listener
     */
    public static void getCurrentLocation(final MyLocationListener listener) {
        // 初始化定位
        mLocationClient = new AMapLocationClient(mContext);
        // 设置定位回调监听
        mLocationClient.setLocationListener(new AMapLocationListener() {

            @Override
            public void onLocationChanged(AMapLocation location) {
                if (location != null) {
                    mLocationClient.stopLocation();
                    mLoction = location;
                    listener.onLocationChanged(location);
                }
            }
        });
        // 初始化AMapLocationClientOption对象
        mLocationOption = new AMapLocationClientOption();
        // 设置定位模式为AMapLocationMode.Hight_Accuracy,高精度模式。
        mLocationOption.setLocationMode(AMapLocationMode.Hight_Accuracy);
        // 获取最近3s内精度最高的一次定位结果:
        // 设置setOnceLocationLatest(boolean
        // b)接口为true,启动定位时SDK会返回最近3s内精度最高的一次定位结果。如果设置其为true,setOnceLocation(boolean
        // b)接口也会被设置为true,反之不会,默认为false。
        mLocationOption.setOnceLocationLatest(true);
        // 给定位客户端对象设置定位参数
        mLocationClient.setLocationOption(mLocationOption);
        // 启动定位
        mLocationClient.startLocation();
    }
}

在Activity中调用:

App.getLocation(new MyLocationListener() {
            
    @Override
    public void onLocationChanged(AMapLocation location) {
        location_tv.setText(location.getCity());                
    }
});

这样,与定位相关的其他需求如经纬度、详细地址等相关逻辑都可以通过此处一个App.getLocation(listener...)中调用获取。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/13379.html

相关文章

  • android studio 安卓集成高德地图获取app定位信息

    摘要:获取一次定位结果该方法默认为。获取最近内精度最高的一次定位结果设置接口为,启动定位时会返回最近内精度最高的一次定位结果。五运行测试结果运行你的代码在虚拟机最好的真实机,我用得就是真实机测试打印获取到的定位信息 在网上搜索过大量集成高德地图的方案,和测试代码,要么就是博主抄来没有测试过的代码,要么就是步骤不连续的,甚至包裹官网给出的解决方案都是欠缺相关步骤的(官网截图都不知道多少年前的了...

    villainhr 评论0 收藏0
  • Android 高德地图定位

    摘要:国家信息省信息城市信息城区信息街道信息街道门牌号信息城市编码地区编码创建Key 打开高德开发平台 → 我的应用 → 创建应用 → 创建新Key 说明: 1.发布版安全码获取:用自己的签名打包成apk安装软件,用SHA1工具查看 2.调试版安全码获取: 直接运行安装软件,再用SHA1工具查看 2.PackageName获取:打开项目的build.gradle的applicationId就是...

    付伦 评论0 收藏0
  • android: 高德地图

    摘要:添加相关类为设置属性生成对象设置给的给设置相关第二个方法添加一组地图会移动到该组所在区域的中心在地图上添一个图片标记对象。在地图上添一组图片标记对象,并设置是否改变地图状态以至于所有的对象都在当前地图可视区域范围内显示。 分为地图,定位,搜索(我还没做导航功能) 建议采用gradle方式集成 添加依赖 在project/build.gradle文件下添加jcenter的仓库地址 all...

    Carbs 评论0 收藏0
  • 通过Weex 300行代码开发一款简易的跑步App

    摘要:你就可以在目录下用或者开发应用代码了设计原理结合了高德地图多个功能,比如定位,地图缩放,绘制折现,进行点的标记等常用功能。文件源代码打包运行开发完毕后,我们可以运行命令,让它安装到我们的测试手机上。 Weex正如它的目标, 一套构建高性能、可扩展的原生应用的跨平台开发方案 Weex 给大家带来的无疑是客户端开发效率的提升,我们可以通过一套代码,实现web,android, iOS的三个...

    isaced 评论0 收藏0
  • Android Studio导入并显示国内地图SDK步骤对比以及需要注意的点(百度地图高德地图为例

    摘要:本文为第一次导入地图类,以百度地图和高德地图为例,腾讯地图后续加入。高德或百度地图高德或百度地图高德或百度地图百度地图独有管理地图生命周期合理管理地图生命周期。 本文为第一次导入地图类SDK,以百度地图和高德地图为例,腾讯地图后续加入。本文若有不当之处以及勘误,欢迎留言指正。 百度和高德地图开放平台官网链接 百度地图开放平台 高德开放平台 步骤 1.获取KEY 在相应的国内SDK开发者...

    cyrils 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<