在Android Studio中使用BaiduMap SDK实时获取当地位置信息

所属分类: 软件编程 / Android 阅读数: 391
收藏 0 赞 0 分享

配置BaiduMap 环境

1.在百度API中新建自己的一个APP包名和APP名需要注意和自己Android Studio 中的包名和APP名保持一致;

2.百度地图中还需要填写一个SHA1 数字签名:

a、输入keytool -list -v -keystore debug.keystore,会得到三种指纹证书,选取SHA1类型的证书(密钥口令是android),这个获取到的SHA1的值和ecplise中获取的值是一样的,是作为debug用的。

b、输入keytool -list -v -keystore XXX.keystore,(这个地方xxx.keystore是你生成app签名时的keystore),密钥库口令:为给APP签名时生成xxx.keystore期间所输入的密码,此时获取的SHA1是release版的。

(以上主要是为了得到AppKey,没有AppKey读取的值会有问题)

3.根据需要在(http://lbsyun.baidu.com/sdk/download?selected=location)下载自己需要的SDK包,因为只实现定位所以我这里只下载了定位功能的包;

4.解压下载好的包,为了让app兼容性更好,我把libs下的所有文件及文件夹复制到了app中libs中;

5.配置Manifest文件,首先在Application中添加你获得的AppKey:

<meta-data
android:name="com.baidu.lbsapi.API_KEY"
android:value="这里是你申请的AppKey" /> 

然后紧接著需要注册一个专门供BaiDuMap使用的service(自己不用实现):

<service
android:name="com.baidu.location.f"
android:enabled="true"
android:process=":remote"/> 

最后再配置权限,定位所需要用到的一系列权限(这一块在官方文档上也是有的):

<!-- 这个权限用于进行网络定位-->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<!-- 这个权限用于访问GPS定位-->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<!-- 用于访问wifi网络信息,wifi信息会用于进行网络定位-->
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<!-- 获取运营商信息,用于支持提供运营商信息相关的接口-->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<!-- 这个权限用于获取wifi的获取权限,wifi信息会用来进行网络定位-->
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
<!-- 用于读取手机当前的状态-->
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<!-- 写入扩展存储,向扩展卡写入数据,用于写入离线定位数据-->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<!-- 访问网络,网络定位需要上网-->
<uses-permission android:name="android.permission.INTERNET" />
<!-- SD卡读取权限,用户写入离线定位数据-->
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/> 

至此环境配置完成。

实现功能代码

1.在layout写一个TextView用来存放自己定位的信息:

<TextView
android:id="@+id/mytext"
android:layout_width="match_parent"
android:layout_height="wrap_content"
/> 

2.在定位中需要用到一个定位回调接口BDLocationListener和类LocationClient:

① BDLocationListener中一个定位回调函数onReceiveLocation(BDLocation location)返回一个BDLocation定位结果;

② LocationClient类实例化并实现一个定位监听函数(registerLocationListener(BDLocationListener listener));

定义TextView控件和其他方法类:

private TextView textView = null;
private Button button = null;
private LocationClient locationClient = null;
public BDLocationListener myListener = new MyBdlocationListener(); 

实现BDLocationListener(里面的一些判断可以自己去考虑和添加或者需要什么定位信息自行去尝试,这里只是得到了当前地址):

public class MyBdlocationListener implements BDLocationListener{
@Override
public void onReceiveLocation(BDLocation location) {
textView.setText(location.getAddrStr()); } } 

分别得到所有控件和实例:

textView = (TextView) findViewById(R.id.mytext);
button = (Button) findViewById(R.id.mybtn);
locationClient = new LocationClient(getApplicationContext());
locationClient.registerLocationListener(myListener);
initLocation();//初始化LocationgClient
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if (locationClient.isStarted()){
locationClient.stop();
}
locationClient.start();
}
}); 

初始化LocationgClient:

private void initLocation(){
LocationClientOption option = new LocationClientOption();
option.setLocationMode(LocationClientOption.LocationMode.Hight_Accuracy
);//可选,默认高精度,设置定位模式,高精度,低功耗,仅设备
option.setCoorType("bd09ll");//可选,默认gcj02,设置返回的定位结果坐标系
int span=1000;
option.setScanSpan(span);//可选,默认0,即仅定位一次,设置发起定位请求的间隔需要大于等于1000ms才是有效的
option.setIsNeedAddress(true);//可选,设置是否需要地址信息,默认不需要
option.setOpenGps(true);//可选,默认false,设置是否使用gps
option.setLocationNotify(true);//可选,默认false,设置是否当gps有效时按照1S1次频率输出GPS结果
option.setIsNeedLocationDescribe(true);//可选,默认false,设置是否需要位置语义化结果,可以在BDLocation.getLocationDescribe里得到,结果类似于“在北京天安门附近”
option.setIsNeedLocationPoiList(true);//可选,默认false,设置是否需要POI结果,可以在BDLocation.getPoiList里得到
option.setIgnoreKillProcess(false);//可选,默认true,定位SDK内部是一个SERVICE,并放到了独立进程,设置是否在stop的时候杀死这个进程,默认不杀死
option.SetIgnoreCacheException(false);//可选,默认false,设置是否收集CRASH信息,默认收集
option.setEnableSimulateGps(false);//可选,默认false,设置是否需要过滤gps仿真结果,默认需要
locationClient.setLocOption(option);
} 

至此所有步骤完成,可以尝试运行一下!

在Android Studio中使用BaiduMap SDK实时获取当地位置信息的相关知识就给大家介绍到这里,希望对大家有所帮助!

更多精彩内容其他人还在看

Android样式和主题之选择器的实例讲解

今天小编就为大家分享一篇关于Android样式和主题之选择器的实例讲解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
收藏 0 赞 0 分享

Android应用动态修改主题的方法示例

今天小编就为大家分享一篇关于Android应用动态修改主题的方法示例,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
收藏 0 赞 0 分享

Flutter 网络请求框架封装详解

这篇文章主要介绍了Flutter 网络请求框架封装详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
收藏 0 赞 0 分享

Flutter倒计时/计时器的实现代码

这篇文章主要介绍了Flutter倒计时/计时器的实现代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
收藏 0 赞 0 分享

Android使用google breakpad捕获分析native cash

这篇文章主要介绍了Android使用google breakpad捕获分析native cash 的相关知识,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
收藏 0 赞 0 分享

详解Flutter WebView与JS互相调用简易指南

这篇文章主要介绍了详解Flutter WebView与JS互相调用简易指南,分为JS调用Flutter和Flutter调用JS,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
收藏 0 赞 0 分享

Android开发实现ListView和adapter配合显示图片和文字列表功能示例

这篇文章主要介绍了Android开发实现ListView和adapter配合显示图片和文字列表功能,涉及Android使用ListView结合adapter适配器实现图文显示功能相关的布局、解析、权限控制等操作技巧,需要的朋友可以参考下
收藏 0 赞 0 分享

Android文字基线Baseline算法的使用讲解

今天小编就为大家分享一篇关于Android文字基线Baseline算法的使用讲解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
收藏 0 赞 0 分享

Flutter自定义实现神奇动效的卡片切换视图的示例代码

这篇文章主要介绍了Flutter自定义实现神奇动效的卡片切换视图的示例代码,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
收藏 0 赞 0 分享

Android实现自定义滑动刻度尺方法示例

这篇文章主要给大家介绍了关于Android实现自定义滑动刻度尺的相关资料,文中通过示例代码介绍的非常详细,对各位Android开发者们具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
收藏 0 赞 0 分享
查看更多