美文网首页Android心得总结
Android-百度地图SDK的简单封装

Android-百度地图SDK的简单封装

作者: BzCoder | 来源:发表于2018-04-03 00:23 被阅读251次

    项目里经常要用到定位功能,每次使用初始化实在有些麻烦,这里就做一个简单的封装以便日后其他项目调用,直接上代码。

    /**
     * class_name: LocationHelper
     * describe:  百度定位SDK封装
     * create_user: BzCoder
     * create_date: 2018/4/2
     * create_time: 23:45
     **/
    
    public class LocationHelper {
        private static LocationHelper helper;
        private LocationClient mLocClient;
        private BDLocation mBdLocation;
        private Context mContext;
        private onGetLoc mListener;
    
        public static LocationHelper getInstance(Context context) {
            if (helper == null) {
                helper = new LocationHelper(context);
            }
            return helper;
        }
    
        public LocationHelper(Context context) {
            initLocation(context);
            mContext = context;
        }
    
        private void initLocation(Context context) {
            LocationClientOption option = new LocationClientOption();
            option.setLocationMode(LocationClientOption.LocationMode.Hight_Accuracy);//可选,默认高精度,设置定位模式,高精度,低功耗,仅设备
            option.setCoorType("bd09ll"); // 设置坐标类型  可选,默认gcj02,设置返回的定位结果坐标系
            option.setScanSpan(1000 * 10);// 可选,默认0,即仅定位一次,设置发起定位请求的间隔需要大于等于1000ms才是有效的
            option.setIsNeedAddress(true);//可选,设置是否需要地址信息,默认不需要
            option.setOpenGps(true);//可选,默认false,设置是否使用gps
            option.setLocationNotify(true);//可选,默认false,设置是否当GPS有效时按照1S/1次频率输出GPS结果
            //option.setIsNeedLocationDescribe(true);//可选,默认false,设置是否需要位置语义化结果,可以在BDLocation.getLocationDescribe里得到,结果类似于“在北京天安门附近”
            //option.setIsNeedLocationPoiList(true);//可选,默认false,设置是否需要POI结果,可以在BDLocation.getPoiList里得到
            //option.setIgnoreKillProcess(false);//可选,默认true,定位SDK内部是一个SERVICE,并放到了独立进程,设置是否在stop的时候杀死这个进程,默认不杀死
            //option.setEnableSimulateGps(false);//可选,默认false,设置是否需要过滤GPS仿真结果,默认需要
    
            BDLocationListener myListener = bdLocation -> {
                if (mListener != null) {
                    mListener.handleLocData(bdLocation);
                }
                mBdLocation = bdLocation;
                stopClient();
                //定位成功后停止定位
            };
            mLocClient = new LocationClient(context);
            mLocClient.registerLocationListener(myListener);
            //可选,设置是否需要地址信息,默认不需要
            mLocClient.setLocOption(option);
        }
    
        public interface onGetLoc {
            void handleLocData(BDLocation bdLocation);
        }
    
        public BDLocation getBdLocation() {
            return mBdLocation;
        }
    
        public void startClient() {
                int permissionCheck = ContextCompat.checkSelfPermission(mContext, Manifest.permission.ACCESS_COARSE_LOCATION);
                if (permissionCheck == PackageManager.PERMISSION_GRANTED && mBdLocation == null) {
                    mLocClient.start();
                } else {
                    //ToastUtil.show(mContext, "目前手机定位未开启", Toast.LENGTH_LONG);
                }
    
        }
    
        public void setListener(onGetLoc mListener) {
            this.mListener = mListener;
        }
    
        public void stopClient() {
            if (null != mLocClient) {
                mLocClient.stop();
            }
        }
    
    }
    

    在程序中使用只需要

     LocationHelper helper =   LocationHelper.getInstance(this);
     //helper.setmListener(bdLocation -> {   });//设置回调
     helper.startClient();
    

    位置讯息获取成功后,就停止定位。再次取得可以通过helper.getBdLocation()直接获取。当然获取之前不要忘记判断NULL。如果觉得好用或者有问题疑问都欢迎留言。谢谢!

    相关文章

      网友评论

        本文标题:Android-百度地图SDK的简单封装

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