百度地图视图实现 —Android (AS)
环境准备
注册KEY
快捷获取 包的 SHA1
选中signingReport 运行后 可以在Build结果中看到生成的SHA1等信息。
这里有一个问题。
新版本的AS初始可能不会生成Task文件,同时也不会有signingReport的选项。
这是需要手动将 红线处取消选中 刷新Gradle 后 task文件自动生成。
导入BaiduMap SDK
将下载的SDK文件后解压导入到libs文件夹 (C-V 就行)
note:不是解压后的文件夹 是将BaiduLBS_Android.jar及其同目录下的文件导入到libs
在build.gradle中添加如下内容:
···
sourceSets {
main {
jniLibs.srcDir 'libs'
}
}
···
dependencies {
···
implementation files("libs/BaiduLBS_Android.jar")
···
}
note:有两个build.gradle 选择Module
代码实现
权限获取
在 AndroidManifest.xml application 标签外 添加如下内容(根据需求选择):
<!-- 这个权限用于进行网络定位-->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"></uses-permission>
<!-- 这个权限用于访问GPS定位-->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission>
<!-- 用于访问wifi网络信息,wifi信息会用于进行网络定位-->
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission>
<!-- 获取运营商信息,用于支持提供运营商信息相关的接口-->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>
<!-- 这个权限用于获取wifi的获取权限,wifi信息会用来进行网络定位-->
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"></uses-permission>
<!-- 写入扩展存储,向扩展卡写入数据,用于写入离线定位数据-->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
<!-- 访问网络,网络定位需要上网-->
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
初始化百度地图服务
手动创建一个application类用于初始化SDK
public class DemoApp extends Application {
@Override
public void onCreate() {
super.onCreate();
SDKInitializer.initialize(this);
SDKInitializer.setCoordType(CoordType.BD09LL);
}
}
注册 后台服务 、 application 和 Key值
<application
android:name=".DemoApp"
/>
···
<service android:name="com.baidu.location.f"
android:enabled="true"
android:process=":remote"/>
<meta-data
android:name="com.baidu.lbsapi.API_KEY"
android:value="申请的KEY" />
···
</application>
实现显示
设置 位置监听
public class MyLocationListener extends BDAbstractLocationListener {
@Override
public void onReceiveLocation(BDLocation location) {
if (location == null || mapView == null){
return;
}
MyLocationData locData = new MyLocationData.Builder()
.accuracy(location.getRadius())
.direction(location.getDirection()).latitude(location.getLatitude())
.longitude(location.getLongitude()).build();
mBaiduMap.setMyLocationData(locData);
}
}
手动添加 MapView视图
<com.baidu.mapapi.map.MapView
android:id="@+id/bmapView"
android:clickable="true">
</com.baidu.mapapi.map.MapView>
初始化View
MapView mapView=null;
LocationClient mLocationClient=null;
BaiduMap mBaiduMap=null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 获取View
mapView=findViewById(R.id.bmapView);
// 获取BaiduMap类
mBaiduMap=mapView.getMap();
mLocationClient = new LocationClient(this);
// 通过LocationClientOption设置LocationClient相关参数
LocationClientOption option = new LocationClientOption();
option.setOpenGps(true); // 打开gps
option.setCoorType("bd09ll"); // 设置坐标类型
option.setScanSpan(1000);
mLocationClient.setLocOption(option);
// 配置模式
MyLocationConfiguration myLocationConfiguration=new MyLocationConfiguration(
// 定位图层显示方式
MyLocationConfiguration.LocationMode.FOLLOWING, // 跟随位置显示
// 是否允许显示方向信息
false,
// 用户自定义定位图标
null,
// 精度圈填充颜色
0xAAFFFF88,
// 精度圈边框颜色
0xAA00FF00
);
mBaiduMap.setMyLocationConfiguration(myLocationConfiguration);
mBaiduMap.setMyLocationEnabled(true);
// 设置位置监听
MyLocationListener myLocationListener = new MyLocationListener();
mLocationClient.registerLocationListener(myLocationListener);
mLocationClient.start();
}
地图调试
AVD 提供了虚拟Location(虚拟GPS地址)的功能,我们可以通过设置Location选项卡的内容来修改AVD的GPS坐标。如下图所示:
此外,也提供了导入GPX和KML文件来修改Location的功能。