美文网首页
封装一个百度地图定位工具类

封装一个百度地图定位工具类

作者: 红烧排骨饭 | 来源:发表于2017-06-06 17:13 被阅读0次

    根据官网的教程,得到百度定位的代码流程如下:

    1. 先创建一个 LocationClient 对象
    2. 注册一个定位回调监听器
    3. 配置 LocationClient
    4. 开始定位

    看过官网的开发者也知道,按照官网的教程来写代码,代码会很长很长。而我们获取定位信息是在定位回调监听器里获取,于是封装的关注点就在于这个回调监听器。

    把其他代码封装起来,然后利用观察者模式从回调监听器里拿到定位信息。

    封装之后的代码

    
    import android.app.Activity;
    import android.content.Context;
    
    import com.baidu.location.BDLocation;
    import com.baidu.location.BDLocationListener;
    import com.baidu.location.LocationClient;
    import com.baidu.location.LocationClientOption;
    
    /**
     * 百度地图v7.1版本的定位工具类
     */
    public class BaiduMapLocateUtil {
    
        public interface OnLocateCompletedListener {
            /**
             * 除了经纬度以外,如果还需要其他定位信息,可以从location参数获取
             */
            void onLocateCompleted(double latitude, double longitude, BDLocation location);
        }
    
        private OnLocateCompletedListener mOnLocateCompletedListener;
        private LocationClient mBDLocationClient;
        private BDLocationListener mBDLocationListener = new BDLocationListener() {
            @Override
            public void onReceiveLocation(BDLocation location) {
                //获取定位结果
                if (mOnLocateCompletedListener != null) {
                    mOnLocateCompletedListener.onLocateCompleted(
                            location.getLatitude(),
                            location.getLongitude(),
                            location);
                }
                mBDLocationClient.stop();
            }
    
            @Override
            public void onConnectHotSpotMessage(String s, int i) {}
        };
    
        private BaiduMapLocateUtil(Context context, OnLocateCompletedListener locateListener) {
            mOnLocateCompletedListener = locateListener;
            mBDLocationClient = new LocationClient(context.getApplicationContext());
            mBDLocationClient.registerLocationListener(mBDLocationListener);
            initLocation();
            mBDLocationClient.start();
        }
    
        private void initLocation() {
            LocationClientOption option = new LocationClientOption();
    
            //可选,默认高精度,设置定位模式,高精度,低功耗,仅设备
            option.setLocationMode(LocationClientOption.LocationMode.Hight_Accuracy);
    
            //可选,默认gcj02,设置返回的定位结果坐标系
            option.setCoorType("bd09ll");
    
            //可选,默认0,即仅定位一次,设置发起定位请求的间隔需要大于等于1000ms才是有效的
            int span = 0;
            option.setScanSpan(span);
    
            //可选,设置是否需要地址信息,默认不需要
            option.setIsNeedAddress(true);
    
            //可选,默认false,设置是否使用gps
            option.setOpenGps(true);
    
            //可选,默认false,设置是否当GPS有效时按照1S/1次频率输出GPS结果
            option.setLocationNotify(true);
    
            //可选,默认false,设置是否需要位置语义化结果,可以在BDLocation.getLocationDescribe里得到,结果类似于“在北京天安门附近”
            option.setIsNeedLocationDescribe(true);
    
            //可选,默认false,设置是否需要POI结果,可以在BDLocation.getPoiList里得到
            option.setIsNeedLocationPoiList(true);
    
            //可选,默认true,定位SDK内部是一个SERVICE,并放到了独立进程,设置是否在stop的时候杀死这个进程,默认不杀死
            option.setIgnoreKillProcess(false);
    
            //可选,默认false,设置是否收集CRASH信息,默认收集
            option.SetIgnoreCacheException(false);
    
            //可选,默认false,设置是否需要过滤GPS仿真结果,默认需要
            option.setEnableSimulateGps(false);
    
            mBDLocationClient.setLocOption(option);
        }
    
        public static void locate(Activity activity, OnLocateCompletedListener locateListener) {
            new BaiduMapLocateUtil(activity, locateListener);
        }
    }
    

    使用

    BaiduMapLocateUtil.locate(this, new BaiduMapLocateUtil.OnLocateCompletedListener() {
    
        @Override
        public void onLocateCompleted(double latitude, double longitude, BDLocation location) {
            StringBuilder result = new StringBuilder();
            result.append("latitude: ").append(latitude).append("\n");
            result.append("longitude: ").append(longitude).append("\n");
            result.append("city: ").append(location.getCity()).append("\n");
            Log.d("BaiduLocationApiDem", result.toString());
        }
    });
    

    相关文章

      网友评论

          本文标题:封装一个百度地图定位工具类

          本文链接:https://www.haomeiwen.com/subject/qtqnfxtx.html