百度地图开发环境配置
1、下载百度地图SDK
开发者可在百度地图AndroidSDK的下载页面下载到最新版的地图SDK。
下载地址为:http://developer.baidu.com/map/index.php?title=androidsdk/sdkandev-download
在这个界面我们可以按照自己的需求下载相应的SDK,同时可选择下载开发包、实例代码、及参考类。现在,只选择下载开发包。下载完成后打开压缩包。可以看到如下文件内容:
readme文件是帮助文档,libs文件夹中文件如下:
其中jar 文件为第三方支持库。其他的文件夹下是各类的动态链接库文件,文件后缀名为.so,全称是shared object,用于动态连接,和dll差不多。
2、将文件配置进开发环境(我的开发环境是Android Studio)
Android Studio工程配置方法
第一步:在工程app/libs目录下放入baidumapapi_vX_X_X.jar包,在src/main/目录下新建jniLibs目录,工程会自动加载src目录下的so动态库,放入libBaiduMapSDK_vX_X_X_X.so
如下图所示,注意jar和so的前3位版本号必须一致,并且保证使用一次下载的文件夹中的两个文件,不能不同功能组件的jar或so交叉使用。
其实就是将上面下载的SDK包中的jar文件全部都复制到libs目录中,动态库文件夹全部赋值到新建的jniLibs文件夹中去。仅此而已。
另外,so的配置也可以参考demo给出的目录结构,如下图所示,在app工程路径下,新建libs,并在libs目录下放入对应不同CPU架构的so文件。这样工程并不会自动加载libs下的so,需在gradle编译时,通过加入代码: jniLibs.srcDir ‘libs‘ 来说明so的路径为该libs路径。
第二步:工程配置还需要把jar包集成到自己的工程中,如图上图所示,放入libs目录下。
第一种方法:对于每个jar文件,右键-选择Add As Library,导入到工程中。对应在build.gradle生成工程所依赖的jar文件说明,如图所示:
第二种方法:菜单栏选择 File—>Project Structure。在弹出的Project Structure对话框中, 选择module, 然后点击Dependencies 选项卡。点击绿色的加号选择File
dependency.然后选择要添加的jar包即可 完成上边的操作后在app目录下的build.gradle文件中,会有引入的类库,如图所示。
当app文件夹中的build.gradle文件中出现如下图的内容就证明已经弄好了:
如果要用到导航功能与TTS语音,还需要在assert文件夹中加入相应的导航SDK中的资源文件。具体可以查看百度的官方文档。
3、获取密钥
官网地址:http://lbsyun.baidu.com/index.php?title=androidsdk/guide/key
申请密钥Android SDK
· 简介
· 申请步骤
简介
在使用百度地图SDK为您提供的各种LBS能力之前,您需要获取百度地图移动版的开发密钥,该密钥与您的百度账户相关联。因此,您必须先有百度帐户,才能获得开发密钥。并且,该密钥与您创建的过程名称有关,具体流程请参考如下介绍。
Key的申请地址为:http://lbsyun.baidu.com/apiconsole/key
注意:
1.为了给用户提供更安全的服务,Android
SDK自v2.1.3版本开始采用了全新的Key验证体系。因此,当您选择使用v2.1.3及之后版本的SDK时,需要到新的Key申请页面进行全新Key的申请;(新旧key不可通用)
2.新Key机制,每个Key仅且唯一对于1个应用验证有效,即对该Key配置环节中使用的包名匹配的应用有效。因此,多个应用【包括多个包名】需申请多个Key,或者对1个Key进行多次配置;
3.在新key机制下,若你需要在同一个工程中同时使用百度地图、定位、导航SDK可以共用同一个key;
4.如果您在Android
SDK开发过程中使用了LBS云服务则需要为该服务单独申请一个for server类型的密钥;
登录百度账号
访问API控制台页面,若您未登录百度账号,将会进入百度账号登录页面,如下图:
登陆API控制台
登录会跳转到API控制台服务,具体如下图:
创建应用
点击"创建应用",进入创建AK页面,输入应用名称,将应用类型改为:“Android
SDK”:
配置应用
在应用类型选为“AndroidSDK”后,需要配置应用的安全码,如下图所示:
获取安全码
安全码的组成规则为:Android签名证书的sha1值+packagename例如:
SHA1:BB:0D:AC:74:D3:21:E1:43:67:71:9B:62:91:AF:A1:66:6E:44:5D:75
包名:com.baidumap.demo
Android应用获取包名packagename,根据开发工具不同,获取位置有所不同
1、使用 eclipse开发
包名是Android应用程序本身在AndroidManifest.xml 中定义的名称,例如:
2、使用 Android studio开发
包名需要在文件build.gradle中查询 applictionId,例如:
Android签名证书的sha1值获取方式有两种:
第一种方法:使用keytool
第1步:运行进入控制台
第2步:定位到.android文件夹下,输入cd
.android
第3步:输入keytool -list -v -keystore debug.keystore,会得到三种指纹证书,选取SHA1类型的证书(密钥口令是android),例如:
其中keytool为jdk自带工具;keystorefile为Android签名证书文件
第二种方法:在eclipse中,在adt 22中直接查看
如果使用adt 22,可以在eclipse中直接查看:windows
-> preferance ->android -> build。 如下图示:
其中“SHA1fingerprint”值即为Android签名证书的sha1值
成功创建KEY
在输入安全码后,点击“确定”完成应用的配置工作,您将会得到一个创建的Key,请妥善保管您所申请的Key。到这您就可以使用新Key来完成您的开发工作了。
四、在AndroidManifest中添加开发密钥、所需权限等信息
(1)在application中添加开发密钥
<application>
<meta-data
android:name="com.baidu.lbsapi.API_KEY"
android:value="开发者
key"/>
</application>
2)添加所需权限
<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.WAKE_LOCK"/>
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permission android:name="android.permission.GET_TASKS"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_SETTINGS"/>
第三步,在布局xml文件中添加地图控件;
<com.baidu.mapapi.map.MapView
android:id="@+id/bmapView"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:clickable="true"/>
第四步,在应用程序创建时初始化 SDK引用的Context 全局变量:
public class MainActivityextends Activity
{
@Override
protectedvoid onCreate(Bundle
savedInstanceState){
super.onCreate(savedInstanceState);
//在使用SDK各组件之前初始化context信息,传入ApplicationContext
//注意该方法要再setContentView方法之前实现
SDKInitializer.initialize(getApplicationContext());
setContentView(R.layout.activity_main);
}
}
注意:在SDK各功能组件使用之前都需要调用
SDKInitializer.initialize(getApplicationContext());,因此我们建议该方法放在Application的初始化方法中
这里需要注意一下:initialize方法中必须传入的是ApplicationContext,传入this,或者MAinActivity.this都不行,不然会报运行时异常,所以百度建议把该方法放到Application的初始化方法中。
第五步,创建地图Activity,管理地图生命周期;
public class MainActivityextends Activity
{
MapView mMapView
=null;
@Override
protectedvoid onCreate(Bundle
savedInstanceState){
super.onCreate(savedInstanceState);
//在使用SDK各组件之前初始化context信息,传入ApplicationContext
//注意该方法要再setContentView方法之前实现
SDKInitializer.initialize(getApplicationContext());
setContentView(R.layout.activity_main);
//获取地图控件引用
mMapView
=(MapView) findViewById(R.id.bmapView);
}
@Override
protectedvoid onDestroy(){
super.onDestroy();
//在activity执行onDestroy时执行mMapView.onDestroy(),实现地图生命周期管理
mMapView.onDestroy();
}
@Override
protectedvoid onResume(){
super.onResume();
//在activity执行onResume时执行mMapView.onResume
(),实现地图生命周期管理
mMapView.onResume();
}
@Override
protectedvoid onPause(){
super.onPause();
//在activity执行onPause时执行mMapView.onPause
(),实现地图生命周期管理
mMapView.onPause();
}
}
完成以上步骤后,运行程序,即可在您的应用中显示如下地图:
以上的例子为大家介绍了如何构建一个基础的地图页面。地图控件自v2.3.5版本起,支持多实例,即开发者可以在一个页面中建立多个地图对象,并且针对这些对象分别操作且不会产生相互干扰。具体使用方法请参考MutiMapViewDemo中的相关介绍。
如果用到定位、导航功能,则需要添加一下信息:
在application标签中声明service组件,每个app拥有自己单独的定位service
<service android:name="com.baidu.location.f" android:enabled="true" android:process=":remote">
</service>
必须声明使用的权限
<!--这个权限用于进行网络定位-->
<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.READ_PHONE_STATE"></uses-permission>
<!--写入扩展存储,向扩展卡写入数据,用于写入离线定位数据-->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
<!--访问网络,网络定位需要上网-->
<uses-permission android:name="android.permission.INTERNET"/>
<!-- SD卡读取权限,用户写入离线定位数据-->
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"></uses-permission>