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

所属分类: 软件编程 / Android 阅读数: 356
收藏 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 HapticFeedback(震动反馈)

下面小编就为大家带来一篇老生常谈Android HapticFeedback(震动反馈)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
收藏 0 赞 0 分享

详谈OnTouchListener与OnGestureListener的区别

下面小编就为大家带来一篇详谈OnTouchListener与OnGestureListener的区别。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
收藏 0 赞 0 分享

Android仿知乎悬浮功能按钮FloatingActionButton效果

前段时间在看属性动画,恰巧这个按钮的效果可以用属性动画实现,下面通过本文给大家分享adroid仿知乎悬浮功能按钮FloatingActionButton效果,需要的朋友参考下吧
收藏 0 赞 0 分享

解决Android V7后自定义Toolbar、ActionBar左侧有空白问题

这篇文章主要介绍的Android V7后自定义Toolbar、ActionBar左侧有空白问题的解决方法,需要的朋友可以参考下
收藏 0 赞 0 分享

Android常见控件使用详解

这篇文章主要为大家详细介绍了Android常见控件的使用方法,包括ProgressBar进度条控件、AlertDialog对话框控件等,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

Android实现简洁的APP更新dialog数字进度条

这篇文章主要为大家详细介绍了Android实现简洁的APP更新dialog数字进度条,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

Android 判断当前语言环境是否是中文环境

本文主要介绍了Android 判断当前语言环境是否是中文环境的方法。具有很好的参考价值。下面跟着小编一起来看下吧
收藏 0 赞 0 分享

详谈Android中Matrix的set、pre、post的区别

下面小编就为大家带来一篇详谈Android中Matrix的set、pre、post的区别。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
收藏 0 赞 0 分享

Android实现登录界面记住密码的存储

这篇文章主要为大家详细介绍了Android SharedPreferrences实现登录界面记住密码的存储,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
收藏 0 赞 0 分享

Android 使用SharedPreferrences储存密码登录界面记住密码功能

Android存储方式有很多种,在这里所用的存储方式是SharedPreferrences, 其采用了Map数据结构来存储数据,以键值的方式存储,可以简单的读取与写入,下面通过实例代码给大家讲解下,需要的朋友参考下吧
收藏 0 赞 0 分享
查看更多