欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Android Studio: 百度地图定位

程序员文章站 2022-04-19 21:25:42
...

内容: 根据百度地图开发者文档,编写百度地图定位程序,在地图上标出实时实地位置

  1. 源码地址:https://gitee.com/huo_shui_three_thousand/BaiduMapApplication
  2. 官方平台:
    [百度地图开发者文档——Android 地图SDK]
    https://lbsyun.baidu.com/index.php?title=androidsdk

* 获取开发**(AK)

  • 创建一个AS空项目

  • 注册百度开发者

  • 登录并创建应用
    Android Studio: 百度地图定位
    Android Studio: 百度地图定位

  • SHA1的获取

    • a. 第一种,照开发文档中那样来,注意找到jre的位置,在其bin目录下执行命令行,找到.android下的debug.keystore的位置与命令行结合
      Android Studio: 百度地图定位
    • b. 第二种,快速,直接找到并点击
      Android Studio: 百度地图定位
  • PackageName的获取

    • Gradle Scripts下 ,build.gradle(Moudle:app)打开 ,android下,applicationId "**********"中的内容
      Android Studio: 百度地图定位
  • 提交,获知开发**AK
    Android Studio: 百度地图定位

* 在项目中集成BaiduMap SDK

  • 下载开发包
    默认不带定位功能,下载的时候一定要记得加上定位功能的包,选择jar 下载,开发包
  • 将开发包拷贝至工程(android转换为project目录)
    a.添加jar文件: 打开解压后的开发包文件夹,找到BaiduLBS_Android.jar文件将其拷贝至工程的app/libs目录下
    b.添加so文件: 打开解压后的开发包文件夹,找到与BaiduLBS_Android.jar文件在同一目录下的其余文件,将其拷贝至工程的app/libs目录
    Android Studio: 百度地图定位
    c.在app目录下的build.gradle文件中android块中配置sourceSets标签
sourceSets {
           main {
               jniLibs.srcDir 'libs'
           }
    }

Android Studio: 百度地图定位
d.往工程中添加jar文件Android Studio: 百度地图定位Android Studio: 百度地图定位

* 配置清单文件

在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" />

Android Studio: 百度地图定位

* 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过时问题
    Android Studio: 百度地图定位

    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);
            }
        }
    }

* 效果:模拟器定位与真机定位

用模拟器的运行结果一直是美国的一个地方,且经纬度维持在这个
数值不会变化,不会随着移动而改变

Android Studio: 百度地图定位

用真机的运行结果就是是当前定位的结果,且当拿手机摇摆或走动
时位置一直在改变,经纬度实时变化

Android Studio: 百度地图定位
总结:我用的模拟器没有GPS定位设备,真机测试可以,GPS定位是实时监控定位,随时都在接收和发射你的位置信息,只有不断的改变才能触发该定位事件。

关于真机测试,查阅了相关资料,下载了Android WiFi ADB工具,打开手机的开发者选项等等
as与手机连接有参考到:

相关标签: android