百度地图SDK Android版开发 1 配置
前言
本文主要介绍如何使用百度地图SDK开发Android地图应用。
准备工作:
申请百度地图移动版开发密钥(AK) 入口
注册和获取密钥 教程
下载地图开发包 入口
本文下载基础地图版本 BaiduLBS_Android_V7.6.2.zip
主要步骤:
- 创建工程
- 配置地图开发包
- 显示地图
- 运行效果
步骤1 创建工程
- AndroidStudio 选择菜单
File
→New
→New Project...
,打开New Project
对话框; - 选择模板
Empty Views Activity
,单击Next
; - 项目参数参考如下,设置后,单击
Finish
;
参数 | 值 |
---|---|
Name | baidudemo |
Package name | com.example.baidudemo |
Save location | 默认路径或自定义路径即可 |
Language | Java |
Minimum SDK | 默认推荐即可 |
Build configuration language | Groovy DSL (build.gradle) |
- 至此创建项目完成,目录结构如下:
├── app
│ ├── build.gradle
│ ├── libs
│ ├── proguard-rules.pro
│ └── src
│ ├── androidTest
│ ├── main
│ └── test
├── build.gradle
├── gradle
│ └── wrapper
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── gradle.properties
├── gradlew
├── gradlew.bat
├── local.properties
└── settings.gradle
步骤2 配置地图开发包
拷贝开发包
- 将下载的地图包解压,拷贝至
app/libs
目录。
app/libs
├── BaiduLBS_Android.aar
├── arm64-v8a
│ ├── libBaiduMapSDK_base_v7_6_2.so
│ ├── libBaiduMapSDK_map_v7_6_2.so
│ ├── libc++_shared.so
│ └── libtiny_magic.so
├── armeabi-v7a
│ ├── libBaiduMapSDK_base_v7_6_2.so
│ ├── libBaiduMapSDK_map_v7_6_2.so
│ ├── libc++_shared.so
│ └── libtiny_magic.so
├── x86
│ ├── libBaiduMapSDK_base_v7_6_2.so
│ ├── libBaiduMapSDK_map_v7_6_2.so
│ ├── libc++_shared.so
│ └── libtiny_magic.so
└── x86_64
├── libBaiduMapSDK_base_v7_6_2.so
├── libBaiduMapSDK_map_v7_6_2.so
├── libc++_shared.so
└── libtiny_magic.so
配置jniLibs目录
- 文件
app/build.gradle
,配置sourceSets
标签。
android {
sourceSets {
main {
jniLibs.srcDir 'libs'
}
}
}
配置依赖
- 文件
app/build.gradle
,dependencies
中添加依赖项。
dependencies {
// 地图包依赖
implementation files('libs/BaiduLBS_Android.aar')
}
配置开发密钥(AK)
- 文件
AndroidManifest.xml
,application
标签中,配置申请好的开发密钥(AK)。
<application>
<meta-data
android:name="com.baidu.lbsapi.API_KEY"
android:value="开发者 key" />
</application>
地图权限配置
- 文件
AndroidManifest.xml
,manifest
标签中添加地图包定位、网络和存储的权限。
<manifest>
<!-- 这个权限用于进行网络定位 -->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<!-- 这个权限用于访问GPS定位 -->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<!-- 访问网络,进行地图相关业务数据请求,包括地图数据,路线规划,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" />
</manifest>
地图初始化
- 自定义
Application
类; - 在
AndroidManifest.xml
中声明该Application
类; - 地图设置隐私模式,初始化地图,设置坐标类型。
DemoApp
类完整代码如下:
package com.example.baidudemo;
import android.app.Application;
import android.content.Context;
import android.content.SharedPreferences;
import com.baidu.mapapi.CoordType;
import com.baidu.mapapi.SDKInitializer;
import com.baidu.mapapi.common.BaiduMapSDKException;
public class DemoApp extends Application {
public static String SP_NAME = "privacy";
public static String SP_KEY = "ifAgree";
@Override
public void onCreate() {
super.onCreate();
// 在使用 SDK 各组间之前初始化 context 信息,传入 ApplicationContext
// 默认隐私政策接口初始化方法
SharedPreferences sp = getSharedPreferences(SP_NAME, Context.MODE_PRIVATE);
boolean ifAgree = sp.getBoolean(SP_KEY, false);
if (ifAgree) {
SDKInitializer.setAgreePrivacy(this, true);
} else {
SDKInitializer.setAgreePrivacy(this, false);
}
try {
SDKInitializer.initialize(this);
} catch (BaiduMapSDKException e) {
e.printStackTrace();
}
//自4.3.0起,百度地图SDK所有接口均支持百度坐标和国测局坐标,用此方法设置您使用的坐标类型.
//包括BD09LL和GCJ02两种坐标,默认是BD09LL坐标。
SDKInitializer.setCoordType(CoordType.BD09LL);
}
}
- 文件
app/build.gradle
,application
中配置自定义Application
类。
<application
android:name=".DemoApp"
>
</application>
步骤3 显示地图
布局文件
activity_main.xml
中添加地图视图。
<com.baidu.mapapi.map.MapView
android:id="@+id/bmapView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:clickable="true" />
地图Activity
MainActivity
管理地图视图生命周期。完整代码如下:
package com.example.baidudemo;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import com.baidu.mapapi.map.MapView;
public class MainActivity extends AppCompatActivity {
private MapView mapView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mapView = findViewById(R.id.bmapView);
}
@Override
protected void onResume() {
super.onResume();
mapView.onResume();
}
@Override
protected void onPause() {
super.onPause();
mapView.onPause();
}
@Override
protected void onDestroy() {
super.onDestroy();
mapView.onDestroy();
}
}