现在好多手机应用开发需要使用到百度地图,在使用百度地图的过程和遇到的问题整理一下方便以后使用
申请密钥
使用白度地图首先需要申请API Key,申请百度账户才能得到API Key. 登录 http://developer.baidu.com/map/ 点击申请密钥
申请过程中需SHA1,使用Eclipse的同学应该很容易使用图像工具找到,但是使用Android-studio的同学可能找不到,我也没有找到
我找的过程是,打开cmd,或者在AS中的Terminal.找到debug-keystore文件,比如我的是D:\Users\*****\.android.
正式开发
创建好项目后,首先将API包括的两个文件baidumapapi.jar和libBMapApiEngine.so拷贝到工程根目录及libs\armeabi目录下,
AS添加jar有两种方法,一种是在所要添加的jar上右键选择"Add as library"即可,一种是打开build.gradle,build.gradle有两个
一定要打开项目内部的build.gradle,添加下面的代码,
dependencies {
.....
compile files('libs/BaiduLBS_Android.jar')
}
基本使用
在AndroidManifest.xml中添加
<meta-data
android:name="com.baidu.lbsapi.API_KEY"
android:value="AK" />
name就是上面的name不要改变,value是你申请到的AK.
百度API所需权限
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.USE_CREDENTIALS" />
<uses-permission android:name="android.permission.MANAGE_ACCOUNTS" />
<uses-permission android:name="android.permission.AUTHENTICATE_ACCOUNTS" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="com.android.launcher.permission.READ_SETTINGS" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.BROADCAST_STICKY" />
<uses-permission android:name="android.permission.WRITE_SETTINGS" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
基本是那个就是这些权限了.
在自己的xml文件中加入mapview,
<com.baidu.mapapi.map.MapView
android:id="@+id/m_mapview"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:clickable="true" />
在Activity中的onCreate方法中,
private MapView mBaiduMapView = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
SDKInitializer.initialize(getApplicationContext());
setContentView(R.layout.activity_main);
initBaiduMap();
}
注意两点,
1.initialize方法中必须传入的是ApplicationContext,传入this,或者MAinActivity.this都会报运行时异常.
2.initialize方法必须写在setContentView方法前面,新同学也许会写在后面结果报xml中的错误.
private void initBaiduMap(){
mBaiduMapView = (MapView) findViewById(R.id.m_mapview);
}
写到这里基本上就可以运行出效果了.
@Override
protected void onResume() {
super.onResume();
mBaiduMapView.onResume();
}
@Override
protected void onPause() {
super.onPause();
mBaiduMapView.onPause();
}
@Override
protected void onDestroy() {
mBaiduMapView.onDestroy();
mBaiduMapView = null;
super.onDestroy();
}
有的新同学使用AS运行的时候会报错,我写出我自己遇到的几个错误.
1.java.lang.UnsatisfiedLinkError: Native method not found: com.baidu.platform.comjni.map.basemap.JNIBaseMap.Create:()J
这个是由于在AS上我们将.so文件放在了libs文件夹中,在AS中这样是不行的.我们需要将其放在JniLibs文件夹中,于是有的新同学就自己创建了
JniLibs文件夹结果还是不行,这个时候新同学可以仔细看一下你所创建的JniLibs文件夹和res文件是否一样,有个金黄色的圆柱行的标志,在右下角.
如果没有那就对了新同学其实不需要自己添加JniLibs文件夹的.我们所要做的是:
打开项目内部的build.gradle,添加下面的代码,
sourceSets {
main {
jniLibs.srcDir 'libs'
}
}
再看一下是否有了JniLibs文件夹.这样就不会后此错误了.
2.也许运行的时候会遇见230错误,Authentication Error errorcode: 230 uid: -1 appid -1 msg: APP Scode码校验失败.
这个其实基本上是自己的AK出现了问题,你可以查看自己的SHA1是否正确,申请密钥时填写的包名是否完整.
申请密钥
使用白度地图首先需要申请API Key,申请百度账户才能得到API Key. 登录 http://developer.baidu.com/map/ 点击申请密钥
申请过程中需SHA1,使用Eclipse的同学应该很容易使用图像工具找到,但是使用Android-studio的同学可能找不到,我也没有找到
我找的过程是,打开cmd,或者在AS中的Terminal.找到debug-keystore文件,比如我的是D:\Users\*****\.android.
在Termina中进入该文件目录,然后输入"keytool -list -v -keystore debug.keystore",命令,记住进入目录下.
正式开发
创建好项目后,首先将API包括的两个文件baidumapapi.jar和libBMapApiEngine.so拷贝到工程根目录及libs\armeabi目录下,
AS添加jar有两种方法,一种是在所要添加的jar上右键选择"Add as library"即可,一种是打开build.gradle,build.gradle有两个
一定要打开项目内部的build.gradle,添加下面的代码,
dependencies {
.....
compile files('libs/BaiduLBS_Android.jar')
}
基本使用
在AndroidManifest.xml中添加
<meta-data
android:name="com.baidu.lbsapi.API_KEY"
android:value="AK" />
name就是上面的name不要改变,value是你申请到的AK.
百度API所需权限
<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.USE_CREDENTIALS" />
<uses-permission android:name="android.permission.MANAGE_ACCOUNTS" />
<uses-permission android:name="android.permission.AUTHENTICATE_ACCOUNTS" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="com.android.launcher.permission.READ_SETTINGS" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.BROADCAST_STICKY" />
<uses-permission android:name="android.permission.WRITE_SETTINGS" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
基本是那个就是这些权限了.
在自己的xml文件中加入mapview,
<com.baidu.mapapi.map.MapView
android:id="@+id/m_mapview"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:clickable="true" />
在Activity中的onCreate方法中,
private MapView mBaiduMapView = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
SDKInitializer.initialize(getApplicationContext());
setContentView(R.layout.activity_main);
initBaiduMap();
}
注意两点,
1.initialize方法中必须传入的是ApplicationContext,传入this,或者MAinActivity.this都会报运行时异常.
2.initialize方法必须写在setContentView方法前面,新同学也许会写在后面结果报xml中的错误.
private void initBaiduMap(){
mBaiduMapView = (MapView) findViewById(R.id.m_mapview);
}
写到这里基本上就可以运行出效果了.
@Override
protected void onResume() {
super.onResume();
mBaiduMapView.onResume();
}
@Override
protected void onPause() {
super.onPause();
mBaiduMapView.onPause();
}
@Override
protected void onDestroy() {
mBaiduMapView.onDestroy();
mBaiduMapView = null;
super.onDestroy();
}
有的新同学使用AS运行的时候会报错,我写出我自己遇到的几个错误.
1.java.lang.UnsatisfiedLinkError: Native method not found: com.baidu.platform.comjni.map.basemap.JNIBaseMap.Create:()J
这个是由于在AS上我们将.so文件放在了libs文件夹中,在AS中这样是不行的.我们需要将其放在JniLibs文件夹中,于是有的新同学就自己创建了
JniLibs文件夹结果还是不行,这个时候新同学可以仔细看一下你所创建的JniLibs文件夹和res文件是否一样,有个金黄色的圆柱行的标志,在右下角.
如果没有那就对了新同学其实不需要自己添加JniLibs文件夹的.我们所要做的是:
打开项目内部的build.gradle,添加下面的代码,
sourceSets {
main {
jniLibs.srcDir 'libs'
}
}
再看一下是否有了JniLibs文件夹.这样就不会后此错误了.
2.也许运行的时候会遇见230错误,Authentication Error errorcode: 230 uid: -1 appid -1 msg: APP Scode码校验失败.
这个其实基本上是自己的AK出现了问题,你可以查看自己的SHA1是否正确,申请密钥时填写的包名是否完整.
另外有的同学的电脑上有两个\.android\debug-keystore文件,我就是这样被坑了的.所有确认一下自己的AS所对应的debug-keystore文件.
今天就写到这里,后续我还会在继续使用百度地图踩踩坑,总结一下为新同学填坑.