Android Studio: 百度地图定位

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

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

* 获取开发密钥(AK)

  • 创建一个AS空项目

  • 注册百度开发者

  • 登录并创建应用
    在这里插入图片描述
    在这里插入图片描述

  • SHA1的获取

    • a. 第一种,照开发文档中那样来,注意找到jre的位置,在其bin目录下执行命令行,找到.android下的debug.keystore的位置与命令行结合
      在这里插入图片描述
    • b. 第二种,快速,直接找到并点击
      在这里插入图片描述
  • PackageName的获取

    • 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与手机连接有参考到:

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值