想要在APP中加入百度地图,考虑到使用百度地图API。主要内容参考百度地图开放平台。
获取秘钥
百度地图开发包下载
- 下载地址:LBS Android SDK
- 选择自定义下载。
- 根据上图,根据需要选择,之后点击“开发包”即可。下载得到的文件解压以后如下。
上述文件可以分为两类,最后一个BaiduLBS_Android.jar文件和其他的文件夹(内部都为.so)。
Android Studio 配置
- 将.jar文件放入app->libs目录下。见下图
- 将剩余文件放入app->src->main->jniLibs目录下,见上图。(jniLibs目录需要自己创建)
- 在工程配置中需要将前面添加的jar文件集成到我们的工程中。点击下图所示按钮。(也可以通过对.jar文件右键,选择Add As Library,就不进行这步操作了)
- 可以看见.jar文件发生了变化,表示集成配置成功。
简单实践
显示地图
- 添加秘钥
配置文件app/src/AndroidManifest.xml中添加如下代码(开发者key对应之前申请到的秘钥)
<application>
<meta-data
android:name="com.baidu.lbsapi.API_KEY"
android:value="开发者 key" />
</application>
- 在外部添加如下权限声明:
<!-- 访问网络,进行地图相关业务数据请求,包括地图数据,路线规划,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" />
注:自Android6.0起部分权限的使用需要开发者在代码中动态申请。
- 在layout 布局文件中添加如下控件。
<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.bdmaptest;
import androidx.appcompat.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 mMapView = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
SDKInitializer.initialize(getApplicationContext());
setContentView(R.layout.activity_main);
//SDKInitializer.setCoordType(CoordType.BD09LL); //默认是BD09LL坐标
mMapView=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();
}
}
说一下注意点。
SDKInitializer.initialize(getApplicationContext());
这行代码一定要放在setContentView(R.layout.activity_main);
之前。
不然会报错Error inflating class com.baidu.mapapi.map.MapView
- 需要在主活动的 onResume(),onPause()和onDestroy的同时对地图进行生命周期管理。即
mMapView.onxxxx()
运行结果:
绘制点标记
- 在上一段代码的
onCreate()
末尾添加如下代码段即可。
//获得地图控制器
BaiduMap mBaiduMap = mMapView.getMap();
//定义Maker坐标点
LatLng point = new LatLng(39.963175, 116.400244);
//构建Marker图标
BitmapDescriptor bitmap = BitmapDescriptorFactory.fromResource(R.drawable.icon_marka);
//构建MarkerOption,用于在地图上添加Marker
OverlayOptions option = new MarkerOptions().position(point).icon(bitmap);
//在地图上添加Marker,并显示
mBaiduMap.addOverlay(option);
运行一下,结果如图(可以看到图上出现小箭头= =)。
绘制线标记
- 在上一段代码的
onCreate()
末尾添加如下代码段即可。
//构建折线点坐标
LatLng p1 = new LatLng(39.97923, 116.357428);
LatLng p2 = new LatLng(39.94923, 116.397428);
LatLng p3 = new LatLng(39.97923, 116.437428);
List<LatLng> points = new ArrayList<LatLng>();
points.add(p1);
points.add(p2);
points.add(p3);
//设置折线的属性
OverlayOptions mOverlayOptions = new PolylineOptions().width(10).color(0xAAFF0000).points(points);
//在地图上绘制折线
//mPloyline 折线对象
Overlay mPolyline = mBaiduMap.addOverlay(mOverlayOptions);
- 绘制线条的属性可以简单参考开发指南
运行一下,看看效果: