因为项目中有几处用到了定位功能,所以简单封装了一下百度地图SDK,不用每次初始化,记录于此.
使用前提是项目app已经导入了百度地图的SDK,项目比较陈旧,v7.2之前的版本,非最新版sdk.
一共两个类,还是很简单的,第一个MyLocationListener:
public abstract class MyLocationListener implements BDLocationListener {
private BDLocation bdLocation;
public MyLocationListener() {
}
@Override
public void onReceiveLocation(BDLocation bdLocation) {
this.bdLocation = bdLocation;
handleLocationData(bdLocation);
}
public abstract void handleLocationData(BDLocation bdLocation);
@Override
public void onConnectHotSpotMessage(String s, int i) {
}
}
第二个
LocationHelper:
public abstract class LocationHelper {
private LocationClient mLocClient;
private BDLocation bdLocation;
public LocationHelper(Context context) {
initLocation(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仿真结果,默认需要
MyLocationListener myListener = new MyLocationListener() {
@Override
public void handleLocationData(BDLocation bdLocation) {
handleLocData(bdLocation);
}
};
this.bdLocation = myListener.getBdLocation();
mLocClient = new LocationClient(context);
mLocClient.registerLocationListener(myListener);
//可选,设置是否需要地址信息,默认不需要
mLocClient.setLocOption(option);
}
public abstract void handleLocData(BDLocation bdLocation);
public BDLocation getBdLocation(){
return bdLocation;
}
public LocationClient getLocationClient(){
return mLocClient;
}
public void startClient(){
mLocClient.start();
}
//退出时销毁定位
public void stopClient(){
if (null != mLocClient) {
mLocClient.stop();
}
}
}
使用:
LocationHelper helper = new LocationHelper(getActivity()) {
@Override public void handleLocData(BDLocation bdLocation) {
//此处添加自己的操作,比如直接设置当前城市
String city = bdLocation.getCity();
mLocation.setText(city);
}
};
helper.startClient();