0 实验环境
在Android Studio中进行有关代码的编写和界面效果展示。
有关文档资料和步骤可参考Android百度地图API的官网。
1 界面展示
1.1 显示地图
1.2 显示定位
2 功能说明
(1)实现显示地图的功能; (2)实现显示定位的功能。
3 配置调用地图SDK的步骤
3.1 注册百度地图开发者账号,并完成应用的开发密钥申请
在这里注册账号的步骤不再介绍,只需到百度开发者平台按步骤申请注册即可。
完成注册后,就需进行创建应用,并申请开发密钥AK。 (1)首先需在AS中新建项目,用于调用百度地图SDK; (2)在百度开发者平台上,注册和获取密钥,详细步骤官网上已讲述的非常详细——注册和获取密钥参考文档; 在这里需要注意获取SHA1时,每个人的命令有所不同。 注意1:首先需要找到Android Studio所用的JDK的目录,我的是G:\androidStudio\Android Studio\jre\bin\ 注意2:然后需要找到keystore的路径,我的是C:\Users\Administrator\.android\debug.keystore 最后在AS的命令行中切换到G:\androidStudio\Android Studio\jre\bin\ 下, 使用keytool -list -v -keystore C:\Users\Administrator\.android\debug.keystore -alias androiddebugkey 即可获取到SHA1 在百度地图开发者官网上成功注册应用后,即可看到该应用的SK码,后续在Android项目中会用到。
3.2 Android Studio配置
配置过程同样可参考官网给出的文档教程
注意1:下载SDK本地依赖时现只需下载基础的服务包 选择下载jar包的方式: 最后配置完成后,会发现在app目录的build.gradle的dependencies块中生成了工程所依赖的jar文件的对应说明
4 核心代码
4.1 显示地图
1.配置AndroidManifest.xml文件
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.baidupositioning">
<application
android:name=".DemoApplication"
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/Theme.BaiduPositioning">
<activity
android:name=".MainActivity"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<meta-data
android:name="com.baidu.lbsapi.API_KEY"
android:value="9qOeFWyGdVgb0Ce1IIGY6nKzfzzmGeUm" />
</application>
<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>
2.在布局文件中添加地图容器
<com.baidu.mapapi.map.MapView
android:id="@+id/bmapView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:clickable="true" />
3.地图初始化
public class DemoApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
SDKInitializer.initialize(this);
SDKInitializer.setCoordType(CoordType.BD09LL);
}
}
4.创建地图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();
mMapView.onResume();
}
@Override
protected void onPause() {
super.onPause();
mMapView.onPause();
}
@Override
protected void onDestroy() {
super.onDestroy();
mMapView.onDestroy();
}
}
4.2 显示定位
1.配置AndroidManifest.xml文件 加入权限:
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
添加服务:
<service android:name="com.baidu.location.f"
android:enabled="true"
android:process=":remote"/>
2.编写MainActivity.java文件
public class MainActivity extends Activity {
private MapView mMapView = null;
private BaiduMap mBaiduMap;
private LocationClient mLocationClient;
private boolean ifFrist = true;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mMapView = (MapView) findViewById(R.id.bmapView);
mBaiduMap.setMyLocationEnabled(true);
mLocationClient = new LocationClient(this);
LocationClientOption option = new LocationClientOption();
option.setOpenGps(true);
option.setCoorType("bd09ll");
option.setScanSpan(1000);
mLocationClient.setLocOption(option);
MyLocationListener myLocationListener = new MyLocationListener();
mLocationClient.registerLocationListener(myLocationListener);
mLocationClient.start();
}
@Override
protected void onResume() {
super.onResume();
mMapView.onResume();
}
@Override
protected void onPause() {
super.onPause();
mMapView.onPause();
}
@Override
protected void onDestroy() {
super.onDestroy();
mMapView.onDestroy();
}
public class MyLocationListener extends BDAbstractLocationListener {
@Override
public void onReceiveLocation(BDLocation location) {
if (location == null || mMapView == null) {
return;
}
MyLocationData locData = new MyLocationData.Builder()
.accuracy(location.getRadius())
.longitude(location.getLongitude())
.latitude(30.583239)
.longitude(location.getLongitude())
.longitude(114.336702)
.direction(location.getDirection())
.build();
mBaiduMap.setMyLocationData(locData);
MyLocationConfiguration configuration = new MyLocationConfiguration(
MyLocationConfiguration.LocationMode.COMPASS, false, null, 0xAAFFFF88, 0xAA00FF00);
mBaiduMap.setMyLocationConfiguration(configuration);
if (ifFrist) {
LatLng ll = new LatLng(location.getLatitude(), location.getLongitude());
MapStatus.Builder builder = new MapStatus.Builder();
builder.target(ll);
builder.zoom(18.0f);
mBaiduMap.setMapStatus(MapStatusUpdateFactory.newMapStatus(builder.build()));
ifFrist = false;
}
}
}
}
5 代码仓库
具体代码已上传至gitee代码仓库
6 总结
学习了如何在应用中简单调用Android百度地图API SDK: (1)实现显示地图的功能; (2)实现显示定位的功能。
后续会继续更新有关Android设计的内容! (注:第23次发文,如有错误和疑问,欢迎在评论区指出!) ——2021.12.2
|