Android Studio: 百度地图定位
程序员文章站
2022-04-19 21:25:42
...
Android Studio: 百度地图定位
内容: 根据百度地图开发者文档,编写百度地图定位程序,在地图上标出实时实地位置
- 源码地址:https://gitee.com/huo_shui_three_thousand/BaiduMapApplication
-
官方平台:
[百度地图开发者文档——Android 地图SDK]
https://lbsyun.baidu.com/index.php?title=androidsdk
* 获取开发**(AK)
-
创建一个AS空项目
-
注册百度开发者
-
登录并创建应用
-
SHA1的获取
- a. 第一种,照开发文档中那样来,注意找到jre的位置,在其bin目录下执行命令行,找到.android下的debug.keystore的位置与命令行结合
- b. 第二种,快速,直接找到并点击
- a. 第一种,照开发文档中那样来,注意找到jre的位置,在其bin目录下执行命令行,找到.android下的debug.keystore的位置与命令行结合
-
PackageName的获取
- Gradle Scripts下 ,build.gradle(Moudle:app)打开 ,android下,applicationId "**********"中的内容
- Gradle Scripts下 ,build.gradle(Moudle:app)打开 ,android下,applicationId "**********"中的内容
-
提交,获知开发**AK
* 在项目中集成BaiduMap SDK
-
下载开发包
默认不带定位功能,下载的时候一定要记得加上定位功能的包,选择jar 下载,开发包 -
将开发包拷贝至工程(android转换为project目录)
a.添加jar文件: 打开解压后的开发包文件夹,找到BaiduLBS_Android.jar文件将其拷贝至工程的app/libs目录下
b.添加so文件: 打开解压后的开发包文件夹,找到与BaiduLBS_Android.jar文件在同一目录下的其余文件,将其拷贝至工程的app/libs目录
c.在app目录下的build.gradle文件中android块中配置sourceSets标签
sourceSets {
main {
jniLibs.srcDir 'libs'
}
}
d.往工程中添加jar文件
* 配置清单文件
在Application标签中声明定位的service组件,添加注册远程服务和
配置应用Key的代码:
<service android:name="com.baidu.location.f"
android:enabled="true"
android:process=":remote"/>
<meta-data
android:name="com.baidu.lbsapi.API_KEY"
android:value="创建的AK" />
配置权限:加入如下权限使用声明,在Application标签外
<!--百度定位所需要权限,前面2个是LOCATE权限组的2个危险权限,需要动态申请 -->
<!-- 访问网络,进行地图相关业务数据请求,包括地图数据,路线规划,POI检索等 -->
<uses-permission android:name="android.permission.INTERNET" />
<!-- 获取网络状态,根据网络状态切换进行数据请求网络转换 -->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<!-- 读取外置存储。如果开发者使用了so动态加载功能并且把so文件放在了外置存储区域,则需要申请该权限,否则不需要 -->
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<!-- 写外置存储。如果开发者使用了离线地图,并且数据写在外置存储区域,则需要申请该权限 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<!--百度定位所需要的普通权限,不需要动态申请 -->
<!-- 这个权限用于进行网络定位 -->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<!-- 这个权限用于访问GPS定位 -->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
* 界面布局
使用帧布局,以及百度地图控件,包含有重叠效果的地图和位置文本
FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<!--百度地图控件-->
<com.baidu.mapapi.map.MapView
android:id="@+id/bmapView"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:clickable="true" />
* MainActivity.java部分
- 如果没有定位权限,动态请求用户允许使用该权限
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, 1);
}else {
requestLocation();
}
}
-
解决registerLocationListener过时问题
private class MyLocationListener implements BDLocationListener { 改为 private class MyLocationListener extends BDAbstractLocationListener {
//内部类,百度位置监听器
private class MyLocationListener extends BDAbstractLocationListener {
@Override
public void onReceiveLocation(BDLocation bdLocation) {
tv_Lat.setText(bdLocation.getLatitude()+"");
tv_Lon.setText(bdLocation.getLongitude()+"");
tv_Add.setText(bdLocation.getAddrStr());
if(bdLocation.getLocType()==BDLocation.TypeGpsLocation || bdLocation.getLocType()==BDLocation.TypeNetWorkLocation){
navigateTo(bdLocation);
}
}
}
* 效果:模拟器定位与真机定位
用模拟器的运行结果一直是美国的一个地方,且经纬度维持在这个
数值不会变化,不会随着移动而改变
用真机的运行结果就是是当前定位的结果,且当拿手机摇摆或走动
时位置一直在改变,经纬度实时变化
总结:我用的模拟器没有GPS定位设备,真机测试可以,GPS定位是实时监控定位,随时都在接收和发射你的位置信息,只有不断的改变才能触发该定位事件。
关于真机测试,查阅了相关资料,下载了Android WiFi ADB工具,打开手机的开发者选项等等
as与手机连接有参考到:
上一篇: CSS基本功:页面布局