百度地图开发(1)
下载百度地图SDK
下载地址: http://lbsyun.baidu.com/index.php?title=androidsdk/sdkandev-download
选择产品下载中的自定义下载。 再根据需求下载需要的开发资源,如果不知道选啥,可以把能选的选了,也可以按照我勾选的来
有的时候下载完成后可能存在无法解压的情况,这算是百度地图开发的一大坑,之前我连续几次遇到这种情况。这里附上我用的包。
百度云链接:链接:https://pan.baidu.com/s/1qkrnwGtKmg9A69fDv4Ygyw
提取码:rvij
下载完后文件如图,直接解压至当前文件夹
解压后:
打开readme.txt文件可以查看当前下载开发包包含的内容。
然后也将BaiduNavi_AndroidSDK.zip解压到当前文件夹,成功后如图(圈出的为解压后新增的文件):
打开BaiduNavi_AndroidSDK文件夹,可以看到一些重要的aar文件,jar包和so库。
将资源包添加到Android studio项目中
第一步,添加jar包和so库
- 将百度地图SDK中的jar包复制到工程目录下的libs文件夹目录下
需要导入的jar包如下:
注意这个jar包是第一次解压后的libs文件下
这些jar包是BaiduNavi_AndroidSDK.zip解压后的BaiduNavi_AndroidSDK->libs目录下的jar包,都复制到Android studio项目的app->libs目录下。
Copy时弹出下框,直接点确定
全部添加后:
2. 随便选一个jar包,右键->add as library->确定,add后出现如下则表示添加成功,注意jar包左边要有小三角
add成功后如图:
- 在app->src->main目录下创建一个jniLibs文件夹
然后将刚才下载的SDK包解压后文件libs目录下的 **arm64-v8a armeabi armeabi-v7a x86 x86_64 **文件全部拷贝到jniLibs文件下,添加成功后如图:
将SDK包解压后的assets文件也拷贝到main目录下,如图:
第二步 添加NaviTts.aar和onsdk_all.aar
导航SDK自带TTS能力已经打包为一个独立的aar,命名为NaviTts.aar,可以将其以aar module引入集成APP project,引入后,可以利用导航SDK提供的TTS接口进行初始化。
导航SDK核心已经打包为一个独立的aar,命名为onsdk_all.aar,可以将其以aar module引入集成APP project,引入后,即可引用导航SDK相关类进行开发。
所以这两个包是非常重要的。引入步骤如下:
1. 将NaviTts.aar文件复制到libs文件目录下
打开BaiduNavi_AndroidSDK,可以看到两个aar文件。拷贝到libs后如图:
接下来按照图片操作:
到这一步后等待一下下
要是app中一时没有NaviTts,可以在All Modules中找到,不过等一会在app中也会有了。Apply后如下,则表示成功:
用同样的步骤将onsdk_all.aar引入,引入成功后如图:
第三步 调试检验结果
到这一步可以先用模拟器调试一下,可能会报如下错误:
此时需要把galaxy_lite_lbs_v2.3.jar删除
右键选择Delete,会显示如下图提醒,点击Do Refactor。
会出现上图是因为我们在build.gradle中implement了这个jar包,所以需要将build.gradle中的一起删,如图:
删除后再次调试,此时还是报错。这是因为有几个jar包冲突了,需要把冲突的jar包删去。报错如图:
可见是图中的三个包冲突,直接删去即可,删完后如图:
此时再运行调试,依旧报错,但这是因为没有写入调用的代码。所以暂时不用管,接着往下做。
基本地图显示
步骤一 在AndroidManifest.xml中配置开发密钥AK和权限
打开AndroidManifest.xml,在< application >中加入如下代码配置开发密钥(AK):
<meta-data
android:name="com.baidu.lbsapi.API_KEY"
android:value="开发者 key" />
加入后如图:
value值开发者key在百度地图开放平台中获取http://lbsyun.baidu.com/apiconsole/key:
然后在AndroidManifest.xml中加入如下权限:
<!-- 获取设备网络状态,禁用后无法获取网络状态-->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<!-- 网络权限,当禁用后,无法进行检索等相关业务-->
<uses-permission android:name="android.permission.INTERNET" />
<!-- 读取设备硬件信息,统计数据-->
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<!-- 读取系统信息,包含系统版本等信息,用作统计-->
<uses-permission android:name="com.android.launcher.permission.READ_SETTINGS" />
<!-- 获取设备的网络状态,鉴权所需网络代理-->
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<!-- 允许sd卡写权限,需写入地图数据,禁用后无法显示地图-->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<!-- 这个权限用于进行网络定位-->
<uses-permission android:name="android.permission.WRITE_SETTINGS" />
<!-- 这个权限用于访问GPS定位-->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<!-- 获取统计数据-->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<!-- 使用步行AR导航,配置Camera权限-->
<uses-permission android:name="android.permission.CAMERA" />
<!-- 程序在手机屏幕关闭后后台进程仍然运行-->
<uses-permission android:name="android.permission.WAKE_LOCK" />
加入后如图:
步骤二 在布局文件中加入百度地图控件
需要在activity_main.xml中加入如下代码:
<com.baidu.mapapi.map.MapView
android:id="@+id/bmapView"
android:layout_width="0dp"
android:layout_height="0dp"
android:clickable="true"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.0"
app:layout_constraintHorizontal_bias="1.0"/>
加入后如图:
步骤三 在MainActivity中加入如下代码:
public class MainActivity extends AppCompatActivity{
private MapView mMapView = null;
private BaiduMap mBaiduMap = null;
private Context context;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
SDKInitializer.initialize(getApplicationContext());
setContentView(R.layout.activity_main);
SDKInitializer.setCoordType(CoordType.BD09LL);
this.context = this;
mMapView = (MapView) findViewById(R.id.bmapView);
//获取地图控件引用
mBaiduMap = mMapView.getMap();
}
protected void onStart() {
super.onStart();
}
@Override
protected void onResume() {
super.onResume();
mMapView.onResume();
}
@Override
protected void onPause() {
super.onPause();
mMapView.onPause();
}
@Override
protected void onStop() {
super.onStop();
}
@Override
protected void onDestroy() {
super.onDestroy();
mBaiduMap.setMyLocationEnabled(false);
mMapView.onDestroy();
mMapView = null;
}
}
加入后如图:
步骤四 对build.gradle文件做如下修改
在app目录下的build.gradle文件中加入如下:
multiDexEnabled true
加入后如图:
最后 运行调试
到此,所有配置都已完毕,点击运行调试程序,一般不会报错,运行结果如下: