百度地图SDK使用示例

Sep 5,2018   4383 words   16 min

Tags: Android

在之前的博客中跑通了百度地图的官方Demo,这篇博客主要介绍如何从0开始自己写代码,使用百度地图SDK。

1.下载SDK

要在自己的项目中使用百度地图SDK首先需要下载对应的库文件。首先可在这个网页选择需要的功能按需下载,如下所示。 默认情况下选择的功能足够使用了,如果需要定位功能,则按需选择定位功能即可。关于如何使用定位功能,之后的博客再做介绍。选择完成后即可下载。 下载完成后可以先解压放在一边。

2.新建项目

打开Intellij IDEA,选择”Create New Project”,然后按照步骤一步步新建项目。 注意用Gradle新建项目时最好有较好的网络,因为可能会要下载一些必要的文件和依赖。 新建完成后,依次在项目中找到app-libs文件夹,将刚刚解压好的文件拷贝到libs文件夹中,如下所示。 同时,在项目的build.gradle文件中配置库文件。在app文件夹下的build.gradle文件中的android括号内添加如下代码用于添加so文件。

sourceSets{
  main{
       jniLibs.srcDir 'libs'  
       //说明so的路径为该libs路径,关联所有地图SDK的so文件
      }
}

同时在dependencies括号中添加如下代码,用于添加jar文件。

implementation files('libs/BaiduLBS_Android.jar')

添加完成后的build.gradle文件如下所示。

3.申请并添加KEY

使用百度地图SDK需要先成为百度地图开发者,然后在控制台中申请KEY即可使用,如下所示。 申请的应用名称可以随便填写,由于我们是Android开发,所以选择Android SDK。启用服务默认是都勾选的。 而SHA1码在上一篇博客中介绍了如何查看,或者点击申请页面中的蓝色”查看详细配置方法”查看方法。 应用包名可以直接在AndroidManifest.xml文件中找到,有package属性,复制粘贴进来即可。 然后点击提交,即可获得这个应用对应的唯一KEY。 在AndroidManifest.xml文件中的application标签中粘贴如下代码,将value部分替换成你申请的KEY。

<meta-data
                android:name="com.baidu.lbsapi.API_KEY"
                android:value="开发者 key"/>

替换后如下所示。

4.添加权限

由于应用在使用过程中需要使用存储、网络等功能,因此需要在清单文件中声明权限,将如下内容粘贴到AndroidManifest.xml文件中的application标签外面。

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> 
//获取设备网络状态,禁用后无法获取网络状态
<uses-permission android:name="android.permission.INTERNET"/> 
//网络权限,当禁用后,无法进行检索等相关业务
<uses-permission android:name="android.permission.READ_PHONE_STATE" /> 
//读取设备硬件信息,统计数据
<uses-permission android:name="com.android.launcher.permission.READ_SETTINGS" /> 
//读取系统信息,包含系统版本等信息,用作统计
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> 
//获取设备的网络状态,鉴权所需网络代理
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> 
//允许sd卡写权限,需写入地图数据,禁用后无法显示地图
<uses-permission android:name="android.permission.WRITE_SETTINGS" /> 
//获取统计数据
<uses-permission android:name="android.permission.CAMERA" />  
//使用步行AR导航,配置Camera权限

粘贴后如下所示。

5.编写程序界面

在界面xml文件中添加如下代码。

<com.baidu.mapapi.map.MapView  
    android:id="@+id/bmapView"  
    android:layout_width="fill_parent"  
    android:layout_height="fill_parent"  
    android:clickable="true" />

MapView是百度地图的显示控件,通过此控件实现与地图的交互操作。预览界面如下所示。

6.初始化SDK

在使用SDK前,都需要调用SDKInitializer.initialize()对SDK进行初始化。可以将初始化放到MainActivityOnCreate()函数中,如下。 需要注意的是这里初始化函数传入的参数应该是应用级别的上下文信息而不是当前Activity的this,所以要使用系统的getApplicationContext()函数来获取上下文。

package com.xuhui.baidumapexample;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import com.baidu.mapapi.CoordType;
import com.baidu.mapapi.SDKInitializer;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //在使用SDK各组件之前初始化context信息,传入ApplicationContext
        SDKInitializer.initialize(getApplicationContext());
        //自4.3.0起,百度地图SDK所有接口均支持百度坐标和国测局坐标,用此方法设置您使用的坐标类型.
        //包括BD09LL和GCJ02两种坐标,默认是BD09LL坐标。
        SDKInitializer.setCoordType(CoordType.BD09LL);
        setContentView(R.layout.activity_main);
        //根据ID找到控件并注册,便于对控件进行操作
        baiduMapView = (MapView) findViewById(R.id.bmapView);
    }
}

7.管理地图生命周期

如果之前做过Android传感器开发应该都知道要重写Activity的OnResume()OnPause()等函数,这里也不例外。 这里要重写的是OnResume()OnPause()OnDestory()函数,MainActivity全部代码如下。

package com.xuhui.baidumapexample;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import com.baidu.mapapi.CoordType;
import com.baidu.mapapi.SDKInitializer;
import com.baidu.mapapi.map.MapView;

public class MainActivity extends AppCompatActivity {

    private MapView baiduMapView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //在使用SDK各组件之前初始化context信息,传入ApplicationContext
        SDKInitializer.initialize(getApplicationContext());
        //自4.3.0起,百度地图SDK所有接口均支持百度坐标和国测局坐标,用此方法设置您使用的坐标类型.
        //包括BD09LL和GCJ02两种坐标,默认是BD09LL坐标。
        SDKInitializer.setCoordType(CoordType.BD09LL);
        setContentView(R.layout.activity_main);
        //根据ID找到控件并注册,便于对控件进行操作
        baiduMapView = (MapView) findViewById(R.id.bmapView);
    }

    @Override
    protected void onResume() {
        super.onResume();
        //在activity执行onResume时执行mMapView.onResume(),实现地图生命周期管理
        baiduMapView.onResume();
    }

    @Override
    protected void onPause() {
        super.onPause();
        //在activity执行onPause时执行mMapView.onPause(),实现地图生命周期管理
        baiduMapView.onPause();
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        //在activity执行onDestroy时执行mMapView.onDestroy(),实现地图生命周期管理
        baiduMapView.onDestroy();
    }
}

8.编译运行

至此,我们自己从0写起的百度地图SDK应用就编写完成了,可以直接编译生成,在虚拟机上运行如下所示。 可以实现地图的在线浏览、缩放等基本功能。其实MapView有很多可以设置的属性,但这里暂时不提。在之后会以一个具体的实例来介绍更为细致的内容。 最后将代码传到了Github,点击查看。注意下载下来以后修改成自己的KEY,否则无法可能正常运行。

本文作者原创,未经许可不得转载,谢谢配合

返回顶部