百度地图开发环境配置

来源:互联网 发布:js 鼠标移动事件 编辑:程序博客网 时间:2024/05/22 14:15


百度地图开发环境配置


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 SDKv2.1.3版本开始采用了全新的Key验证体系。因此,当您选择使用v2.1.3及之后版本的SDK时,需要到新的Key申请页面进行全新Key的申请;(新旧key不可通用)

2.Key机制,每个Key仅且唯一对于1个应用验证有效,即对该Key配置环节中使用的包名匹配的应用有效。因此,多个应用【包括多个包名】需申请多个Key,或者对1Key进行多次配置;

3.在新key机制下,若你需要在同一个工程中同时使用百度地图、定位、导航SDK可以共用同一个key

4.如果您在Android SDK开发过程中使用了LBS云服务则需要为该服务单独申请一个for server类型的密钥;

登录百度账号

访问API控制台页面,若您未登录百度账号,将会进入百度账号登录页面,如下图:


登陆API控制台

登录会跳转到API控制台服务,具体如下图:


创建应用

点击"创建应用",进入创建AK页面,输入应用名称,将应用类型改为:“Android SDK”:



配置应用

在应用类型选为“AndroidSDK”后,需要配置应用的安全码,如下图所示:

获取安全码

安全码的组成规则为:Android签名证书的sha1值+packagename例如:

 

SHA1BB: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),例如:

其中keytooljdk自带工具;keystorefileAndroid签名证书文件




第二种方法:在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>

 



1 0