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

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

/**
 * 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的简单封装)