小工具知识网

当前位置: 首页 > 行业知识 > 基于百度地图实现Android定位功能实现(一)

行业知识

基于百度地图实现Android定位功能实现(一)

2026-11-05 13:39:52 来源:互联网转载

Android集成百度地图

文章目录

  • Android集成百度地图
    • 前言
    • 准备工作
      • 创建工程
      • 申请密钥
      • 在项目中集成BaiduMap SDK
      • 创建地图

        前言

        本案例使用百度地图实现在Android中集成地图,并且实现了普通地图/卫星地图,以及路况图和热状图功能;

        参考技术文档:Android 地图SDK

        软件环境:

        准备工作

        创建工程

        注:新创建的项目的 Name 和 Package name比较重要,后面会使用到

        在正式开始之前,给大家看看初始化项目的结构

        申请密钥

        控制台->我的管理/我的应用->创建应用(这里我已经创建过了,大家忽略即可)

        点击创建应用即可跳转到如下界面:

        • 应用类型选择Android SDK,应用名称大家可以根据自己的需求添加名称

          页面接续向下滑动,出现了如下界面:

          这里必填项就是发布版SHA1和PackageName,这两个都比较容易获取,首先最容易获取的就是包名了;

          打开刚刚新建的项目工程,然后打开app结构下的build.gradle即可查看PackageName了;

          接下来就是填写SHA1了;我使用的操作系统是macOS

          官方操作手册:注册和获取密钥

          对于Mac用户:

          1. 打开终端,进入 .android目录

            cd .android
          2. 打开 debug.keystore

            keytool -list -v -keystore debug.keystore
          3. 输入密码

            系统默认的密码是android,输入完后直接回车,最后就可以在终端上面看见SHA1密钥了

            在终端中即可查看SHA1了,并将其赋值粘贴即可,最后点击确定即可生成新的AK密钥了;

            最后点击提交后在控制台中置顶的应用为新建应用:

          在项目中集成BaiduMap SDK

          百度地图官方提供了两种SDK集成方式,分别为:

          • 下载 SDK 本地依赖(本次采用方法)
          • 通过 Gradle 集成 SDK
            1. 下载开发包

              这里选择 全量定位+基础地图(含室内图),选择的配置选择jar包即可,点击开发包即可下载

              示例代码+类参考大家自行下载,里面有文档可以查看

            2. 将开发包拷贝至工程app/libs目录下

              1. 添加jar文件

                在libs目录下,选中每一个jar文件(此处只有一个BaiduLbs_Android.jar)右键,选择Add As Library…,此时会发现在app目录的build.gradle的dependencies块中生成了工程所依赖的jar文件的对应说明(此图略)

              2. 添加so文件

                在src/main/目录下新建jniLibs目录(如果您的项目中已经包含该目录不用重复创建),在下载的开发包中拷贝项目中需要的CPU架构对应的so文件文件夹到jniLibs目录,如图:

            至此,已完成通过本地依赖集成SDK。


            创建地图

            百度地图SDK为开发者提供了便捷的使用百度地图能力的接口,通过以下几步操作,即可在您的应用中使用百度地图:

            1. 第一步 配置AndroidManifest.xml文件

              在中加入如下代码配置开发密钥(AK)

                      

              这里的AK密钥在我们创建的应用部分即可查看

            2. 在外部添加如下权限声明

                   
            3. 在布局文件中添加地图容器

              MapView是View的一个子类,用于在Android View中放置地图。MapView的使用方法与Android提供的其他View一样。

               
            4. 地图初始化

              新建一个自定义的Application,在其onCreate方法中完成SDK的初始化。示例代码如下

              public class DemoApplication extends Application {    @Override    public void onCreate() {        super.onCreate();        //在使用SDK各组件之前初始化context信息,传入ApplicationContext        SDKInitializer.setAgreePrivacy(this,true);  //自Android6.0起部分权限的使用需要开发者在代码中动态申请        SDKInitializer.initialize(this);        //自4.3.0起,百度地图SDK所有接口均支持百度坐标和国测局坐标,用此方法设置您使用的坐标类型.        //包括BD09LL和GCJ02两种坐标,默认是BD09LL坐标。        SDKInitializer.setCoordType(CoordType.BD09LL);    }}

              在AndroidManifest.xml文件中声明该Application

            5. 创建地图Activity,管理MapView生命周期

              public class MainActivity extends Activity {      private MapView mMapView = null;      @Override      protected void onCreate(Bundle savedInstanceState) {          super.onCreate(savedInstanceState);            setContentView(R.layout.activity_main);          //获取地图控件引用          mMapView = (MapView) findViewById(R.id.bmapView);      }      @Override      protected void onResume() {         super.onResume();         //在activity执行onResume时执行mMapView. onResume (),实现地图生命周期管理         mMapView.onResume();      }      @Override      protected void onPause() {        super.onPause();        //在activity执行onPause时执行mMapView. onPause (),实现地图生命周期管理        mMapView.onPause();      }     @Override      protected void onDestroy() {        super.onDestroy();        //在activity执行onDestroy时执行mMapView.onDestroy(),实现地图生命周期管理        mMapView.onDestroy();      }  }
            6. 完成以上工作即可在您的应用中显示地图

              如果使用的AVD模拟器启动项目的话,项目会出现如下错误:

              如果出现了E/AndroidRuntime: FATAL EXCEPTION: GLThread这个问题,说明项目运行“成功”了;这是因为定位不能用模拟器,你安装到手机上才行,换个夜神模拟器或者雷电模拟器试试说不准就好了;

              下图是真机测试结果(默认是普通地图):

            除了这些,平时常见的还有卫星地图,热力图,路况图等;接下来实现这些功能:

            修改string.xml文件

                BaiduMap    普通地图    卫星地图    开启路况图    开启热力图

            设置背景颜色gradient_color.xml

                

            接下来修改activity_main.xml文件

                                                                                        

            最后修改MainActivity.java文件即可:

            package com.weicomp.baidumap;import android.app.Activity;import android.os.Bundle;import android.widget.CheckBox;import android.widget.CompoundButton;import android.widget.RadioButton;import android.widget.RadioGroup;import com.baidu.mapapi.map.BaiduMap;import com.baidu.mapapi.map.MapView;public class MainActivity extends Activity {    private MapView mMapView = null;    private RadioGroup mRgType;    private RadioButton mRbNormal, mRbSatellite;    private CheckBox mCbtTrafficEnable, mCbHeatMapEnable;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        //获取地图控件引用        mMapView = (MapView) findViewById(R.id.bmapView);        mRgType = findViewById(R.id.rg_type);        mRbNormal = findViewById(R.id.rb_normal);        mRbSatellite = findViewById(R.id.rb_satellite);        mCbtTrafficEnable = findViewById(R.id.cb_trafficEnable);        mCbHeatMapEnable = findViewById(R.id.cb_heatMapEnable);        initEvent();    }    private void initEvent() {        mRgType.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() {            @Override            public void onCheckedChanged(RadioGroup radioGroup, int i) {                if (i == mRbNormal.getId()) {                    mMapView.getMap().setMapType(BaiduMap.MAP_TYPE_NORMAL);                } else if (i == mRbSatellite.getId()) {                    mMapView.getMap().setMapType(BaiduMap.MAP_TYPE_SATELLITE);                }            }        });        mCbtTrafficEnable.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {            @Override            public void onCheckedChanged(CompoundButton compoundButton, boolean b) {                mMapView.getMap().setTrafficEnabled(b);            }        });        mCbHeatMapEnable.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {            @Override            public void onCheckedChanged(CompoundButton compoundButton, boolean b) {                mMapView.getMap().setBaiduHeatMapEnabled(b);            }        });    }    @Override    protected void onResume() {        super.onResume();        //在activity执行onResume时执行mMapView. onResume (),实现地图生命周期管理        mMapView.onResume();    }    @Override    protected void onPause() {        super.onPause();        //在activity执行onPause时执行mMapView. onPause (),实现地图生命周期管理        mMapView.onPause();    }    @Override    protected void onDestroy() {        super.onDestroy();        //在activity执行onDestroy时执行mMapView.onDestroy(),实现地图生命周期管理        mMapView.onDestroy();    }}

            最后在真机测试一边,测试结果如下所示:

            后面会陆续实现定位等功能;

上一篇:RabbitMQ 详解

下一篇:ps怎么做纸质效果?