重点解析
1.导入SDK
如何下载
我这次把能下的功能都下载了,包括全量定位、地图、导航。
所选择的SDK中包含的功能.png
如何集成so库
将下载好的官方demo中的so库相关文件夹全部拷贝到libs中
so文件安放位置.png
但这样工程并不会自动加载libs下的so,需说明so的路径为该libs路径,关联所有地图SDK的so文件,所有需在app文件夹下的bulid.gradle加入代码: jniLibs.srcDir 'libs' ,详细代码如下:
sourceSets {
main {
//说明so的路径为该libs路径,关联所有地图SDK的so文件
jniLibs.srcDirs = ['libs']
}
}
详细配置代码.png
如何集成jar包
1. 方法一
工程配置还需要把jar包集成到自己的工程中,如上图所示,放入libs目录下。对于每个jar文件,右键-选择Add As Library,导入到工程中。同时在build.gradle中会生成工程所依赖的对应的jar文件说明,代码如下所示:
dependencies{
compile files('libs/BaiduLBS_Android.jar')
}
2. 方法二:
- 菜单栏选择 File —>Project Structure。
- 在弹出的Project Structure 对话框中, 选择左侧列表module的app, 然后点击 Dependencies 选项卡.
-
点击绿色的加号选择Jar dependency. 然后选择要添加的jar包即可 完成上边的操作后在app目录下的build.gradle文件中,会有引入的类库,如上述代码所示。
操作说明png
2.使用
定位工具类
这是一个单例模式设计的类
/**
* <pre>
* author : 杨丽金
* time : 2018/07/03
* desc : 百度地图定位工具类:定时定位
* </pre>
*/
public class MyBDLocationHelper {
/*
* 单例模式:应用程序中只需要一个LocationClient即可
* 1,静态内部类单例模式
* 2,开始定位前:要为LocationClient设置好定位参数LocationClientOption;设置位置信息回调接口
*/
private LocationClient mLocationClient;
private LocationClientOption mOption;
private BDAbstractLocationListener mLocationListener;
private MyBDLocationHelper() {
// 1,实例化LocationClient类
mLocationClient = new LocationClient(AppCache.getContext());
// 2,设置SDK参数
mLocationClient.setLocOption(getLocationOption());
}
/*
* 获取到LocationOption参数
*/
private LocationClientOption getLocationOption() {
if (mOption == null) {
mOption = new LocationClientOption();
mOption.setLocationMode(LocationClientOption.LocationMode.Hight_Accuracy);//可选,默认高精度,设置定位模式,高精度,低功耗,仅设备
mOption.setCoorType("bd09ll");//可选,默认gcj02,设置返回的定位结果坐标系,如果配合百度地图使用,建议设置为bd09ll;
// 定位时间间隔
mOption.setScanSpan(Constant.BAIDU_GPS_INTERVAL);//可选,默认0,即仅定位一次,设置发起定位请求的间隔需要大于等于1000ms才是有效的
mOption.setIsNeedAddress(true);//可选,设置是否需要地址信息,默认不需要
mOption.setIsNeedLocationDescribe(true);//可选,设置是否需要地址描述
mOption.setNeedDeviceDirect(false);//可选,设置是否需要设备方向结果
mOption.setLocationNotify(false);//可选,默认false,设置是否当gps有效时按照1S1次频率输出GPS结果
mOption.setIgnoreKillProcess(true);//可选,默认true,定位SDK内部是一个SERVICE,并放到了独立进程,设置是否在stop的时候杀死这个进程,默认不杀死
mOption.setIsNeedLocationDescribe(true);//可选,默认false,设置是否需要位置语义化结果,可以在BDLocation.getLocationDescribe里得到,结果类似于“在北京天安门附近”
mOption.setIsNeedLocationPoiList(false);//可选,默认false,设置是否需要POI结果,可以在BDLocation.getPoiList里得到
mOption.SetIgnoreCacheException(false);//可选,默认false,设置是否收集CRASH信息,默认收集
// 设置需要海拔信息
mOption.setIsNeedAltitude(true);//可选,默认false,设置定位时是否需要海拔信息,默认不需要,除基础定位版本都可用
}
return mOption;
}
public static MyBDLocationHelper getInstance() {
return SingletonHolder.instance;
}
/**
* 开始定位
*/
public void startLocate() {
if (mLocationClient != null) {
mLocationClient.start();
}
}
/**
* 注册监听事件
*
* @param lis
*/
public void registerLocationLis(BDAbstractLocationListener lis) {
if (mLocationClient != null && lis != null) {
mLocationListener = lis;
mLocationClient.registerLocationListener(lis);
}
}
/**
* 取消注册监听事件
*/
public void unregisterLocationLis() {
if (mLocationListener != null) {
if (mLocationClient != null) {
mLocationClient.unRegisterLocationListener(mLocationListener);
}
mLocationListener = null;
}
}
/**
* 停止定位
*/
public void stopLocate() {
if (mLocationClient != null && mLocationClient.isStarted()) {
mLocationClient.stop();
}
}
private static class SingletonHolder {
private static final MyBDLocationHelper instance = new MyBDLocationHelper();
}
}
工具类的使用
onCreate()中开始定位、注册定位结果接收器,onDestroy()中停止定位。或:onResume()中开始定位、注册定位结果接收器,onPause()中停止定位。
public class QueryActivity extends MyBaseActivity {
// 该方法在Activity的生命周期的onCreate()中调用
@Override
public void initData(Bundle savedInstanceState) {
// 开始定位
startBDLocation();
}
@Override
public int getLayoutId() {
return R.layout.activity_query;
}
/**
* 销毁时,停止服务
*/
@Override
protected void onDestroy() {
super.onDestroy();
// 停止定位
stopLocate();
}
private void stopLocate() {
// 暂停定位,不接收数据
MyBDLocationHelper.getInstance().unregisterLocationLis();
MyBDLocationHelper.getInstance().stopLocate();
}
private void startBDLocation() {
// 开启百度定时定位
MyBDLocationHelper helper = MyBDLocationHelper.getInstance();
helper.registerLocationLis(new MyLocationListener());
helper.startLocate();
}
}
网友评论