本文主要介绍如何使用百度地图SDK开发Android地图应用。
准备工作:
申请百度地图移动版开发密钥(AK) 入口
注册和获取密钥 教程
下载地图开发包 入口
本文下载基础地图版本 BaiduLBS_Android_V7.6.2.zip
主要步骤:
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
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
app/build.gradle
,配置sourceSets
标签。android {
sourceSets {
main {
jniLibs.srcDir 'libs'
}
}
}
app/build.gradle
,dependencies
中添加依赖项。dependencies {
// 地图包依赖
implementation files('libs/BaiduLBS_Android.aar')
}
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" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<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>
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" />
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();
}
}