百度地图Android SDK是一套应用于Android 4.0及以上版本的地图能力应用程序接口,开发者可以轻松、快捷地在自己的Android应用中集成。目前已经应用于网约车,共享出行,外卖,快递物流等众多行业。

功能包括:地图展示(普通地图、卫星图、路况图、热力图、室内图、个性化地图)与地图交互 (手势交互、控件交互、方法交互) 在地图上绘制(标记点、绘制线、绘制面、绘制Overlay等)检索地图数据(检索POI、公交信息检索、地理编码检索、行政区域检索等)路线规划(步行路线规划、骑行路线规划、驾车路线规划、跨城路线规划、公交路线规划)等功能。

Step 1 注册和获取密钥(AK)

用户在使用SDK之前需要获取百度地图移动版开发密钥(AK),该AK与百度账户相关联。 开发者必须先有百度帐户,才能获得AK。并且,该AK与引用SDK的程序包名有关,具体流程请参照申请密钥。请妥善保存AK,地图初始化时需要用到AK。创建好的AK会永久保存在控制台。

获取安全码

申请密钥开发需知:

  • 安全码的组成规则为:Android签名证书的SHA1值+packagena

  • 同一个AK中,可以填写开发版SHA1和发布版SHA1,这样App从开发、测试到发布整个过程中均不需要改动AK。

  • 此功能完全兼容以前的AK,默认将原有的SHA1放在发布版SHA1上,开发者也可自己更新,将原有的开发版本的AK和发布版本的AK对应的SHA1值合并后使用。

  • 调试版本(debug)和发布版本(release)下的SHA1值是不同的,发布apk时需要根据发布apk对应的keystore重新配置Key。

获取SHA1值

  • 获取SHA1因不同的开发工具(Eclipse/Android Studio)不同电脑系统(Windows/Mac)获取的方式也不相同,执行的命令是相同的,在Windows系统下或者Eclipse开发工具下请参考官网的获取方式(点击文章下方阅读原文),以下使用的是mac系统studio开发工具,获取调试版SHA1值为列。

(1) 打开终端工具:输入cd .android,定位到.android文件夹下

(2)调试版本使用 debug.keystore,命令为:keytool -list -v -keystore debug.keystore

发布版本使用apk对应的 keystore,命令为:keytool -list -v -keystore apk的keystore

(3)提示输入密钥库密码,调试版本默认密码是: android,发布模式的密码是为apk的keystore设置的密码。输入密钥后回车(如果没设置密码,可直接回车),此时可在控制台显示的信息中获取SHA1值,如下图所示:

获取包名

  • Android应用获取包名packagename,根据开发工具不同,获取位置有所不同,Eclipse请参考官网获取方式(点击文章下方阅读原文),以下使用Android Studio获取

  • 开发包名需要在文件build.gradle中查询applicationId,并确保applicationId与在AndroidManifest.xml中定义的包名一致 在文件build.gradle中查询applicationId,方法如图:

  • 注意:使用Android Studio开发,如遇到applicationId与在AndroidManifest.xml中定义的包名不一致的情况,以appclicationid为准。

  • 完成以上步骤点击确定可获取到AK值如图所示:

  • 申请完AK以后接下来就需要在AndroidManifest.xml文件中的application中配置AK如图所示:

 

<application>

<meta-data

android:name="com.baidu.lbsapi.API_KEY"

android:value="开发者 key" />

</application>

Step 2 下载百度地图SDK

下载地图SDK有两种方式

  • 一键下载(下载所有百度地图SDK功能)

  • 自定义下载(结合自身需求、自定义选择业务功能,打包下载所选功能开发包)

自定义下载完成后的文件格式

(1) BaiduLAB_Android.jar文件就是包含了所需要的所有功能的jar包。

(2) armeabi等文件夹里就是针对不同手机CPU架构的.so文件。

Step 3 Android Studio工程配置

添加jar包

  • 将下载的地图SDK的jar包复制到工程的libs目录下,如图所示

方法一:

工程配置还需要把jar包集成到自己的工程中,如上图所示,放入libs目录下。对于每个jar文件,右键-选择Add As Library,导入到工程中。同时在build.gradle中会生成工程所依赖的对应的jar文件说明,代码如下所示:

 

dependencies{

compile files('libs/BaiduLBS_Android.jar')

}

方法二:

1)菜单栏选择 File —>Project Structure。

2)在弹出的Project Structure对话框中, 选择左侧列表module的app, 然后点击Dependencies选项卡。

3)点击绿色的加号选择Jar dependency然后选择要添加的jar包即可完成上边的操作,完成后在APP目录下的build.gradle文件中,会有引入的类库,如上述代码所示。

添加so库

  • 现在Android兼容 5 种CPU架构: armeabi、armeabi-v7a、arm64-v8a、x86、x86_64。开发者可根据实际使用需求,放置所需.so到对应的工程文件夹内。

方法一:

使用默认配置,不需要修改build.gradle,在src/main/目录下新建jniLibs目录,工程会自动加载src目录下的.so动态库,如果已有这个目录,可以直接将.so文件拷贝到对应的架构下,如下图目录结构所示。

方法二:

使用自定义配置,但这样工程并不会自动加载libs下的.so,需说明.so的路径为该libs路径,关联所有地图SDK的.so文件,即在APP文件夹下的bulid.gradle加入代码。

(1) 将下载文件的armeabi文件夹复制到libs目录。

(2) 打开build.gradle,找到sourceSets标签,在里面增加一项配置,如图所示:

 

sourceSets {

main {

jniLibs.srcDir 'libs'

}

}

添加所需权限

  • 使用地图SDK之前,需要在AndroidManifest.xml 文件中进行相关权限设置,确保地图功能可以正常使用。

注意: 权限应添加在appliction之外,如添加到appliction内部,会导致无法访问网络,不显示地图。

 

<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />

<!-- 这个权限用于进行网络定位 -->

<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" />

//获取设备的网络状态,鉴权所需网络代理

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

//允许sd卡写权限,需写入地图数据,禁用后无法显示地图

<uses-permission android:name="android.permission.WRITE_SETTINGS" />

//获取统计数据

<uses-permission android:name="android.permission.GET_TASKS" />

//鉴权所需该权限获取进程列表

<uses-permission android:name="android.permission.CAMERA" />

//使用步行AR导航,配置Camera权限

配置AK

  • 在AndroidManifest.xml的application中添加开发密钥AK。如果还没有获取AK,请按照Step1流程来获取。

     

    <application>

    <meta-data

    android:name="com.baidu.lbsapi.API_KEY"

    android:value="开发者 key" />

    </application>

Step 4 Hello BaiduMap

显示基础地图

百度地图SDK支持两种地图组件分别是MapView和TextureMapView,是Android View类的子类,MapView和TextureMapView都是地图容器。用这两种加载地图的方法与Android提供的其他View 一样,用于在Android View中放置地图。两个地图组件的使用方法是一样的,具体的使用步骤如下:

  • 在布局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全局变量;

    注意:地图的各个组件功能依赖与SDK的正确初始化,并且为了保证整个APP的生命周期里地图SDK都存活、功能可用,我们建议该方法在APP的Applcaition派生类的onCreate方法中调用。

     

    public class MainActivity extends Activity {

    @Override

    protected void onCreate(Bundle savedInstanceState) {

    super.onCreate(savedInstanceState);

    //在使用SDK各组件之前初始化context信息,传入ApplicationContext

    //注意该方法要再setContentView方法之前实现

    SDKInitializer.initialize(getApplicationContext());

    setContentView(R.layout.activity_main);

    }

    }

  • 创建地图Activity,管理地图生命周期;

     

    public class MainActivity extends Activity {

    private MapView mMapView = null;

    @Override

    protected void 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

    protected void onDestroy() {

    super.onDestroy();

    //在activity执行onDestroy时执行mMapView.onDestroy(),实现地图生命周期管理

    mMapView.onDestroy();

    }

    @Override

    protected void onResume() {

    super.onResume();

    //在activity执行onResume时执行mMapView. onResume (),实现地图生命周期管理

    mMapView.onResume();

    }

    @Override

    protected void onPause() {

    super.onPause();

    //在activity执行onPause时执行mMapView. onPause (),实现地图生命周期管理

    mMapView.onPause();

    }

    }

    `

  • 注:自v4.5.2起,mapview已经可以完美替代textureMapview,且性能更好。textureMapview当前版本仍会保留,但不建议使用。

  • 如果使用TextureView渲染(使用前提:Android 4.0以上系统,并开启强制GPU渲染)。

  • 完成以上步骤就可以在你的APP中显示出地图。

---------常见错误--------- 

  • 鉴权错误码230:我们对Mobile类型(Android/IOS)的服务请求进行了安全码校验;所谓安全码即开发者在API控制台申请AK(AK和APP一一对应)时提供的APP签名的SHA1+”;”+包名;请求服务必须要携带该安全码作为参数,不携带或者携带不一致的安全码给服务端,均会返回230错误。当出现230错误时。解决办法:请开发者先查看一下APP当前签名的SHA1值(注意不是MD5)和包名,然后去API控制台把查看该AK对应配置的安全码是否和APP实际的一致,如果不一致请去API控制台手动修改一致即可。

  • 错误码-11:如果遇到错误码是errorcode: -11 uid: -1 appid -1 msg: httpsPost failed; 这种情况下是由系统的时间不是当前时间造成的,解决办法:把时间修改成自动获取时间和日期,也就是使用网络提供的时间。

  • 错误码-10:如果遇到错误码是errorcode: -10 uid: -1 appid -1 msg: Current network is not available;(1)这种情况下一般都是由网络原因造成的鉴权失败,解决办法:检查网络是不是正常。(2)网络正常,还是出现这种情况,请打开浏览器排查下能不能正常访问https请求的地址,如不能正常访问则说明您的https安全证书到期,需要网站所有者到https安全证书签发机构CA续签证书。

  • 错误码-1:如果遇到错误码是errorcode: -1 uid: -1 appid -1 msg: Exception:java.security.cert.CertPathValidatorException: Trust anchor for certification path not found;这种情况下是由https证书过期造成的,解决办法:请打开浏览器排查下能不能正常访问https请求的地址,如不能正常访问则说明您的https安全证书到期,需要网站所有者到https安全证书签发机构CA续签证书。

  • 错误码-200:如果遇到错误码是errorcode: 200 uid: -1 appid -1 msg: APP不存在;这种情况一般都是AndroidManifest.xml文件中key没有填写正确。解决办法:请仔细核对AndroidManifest.xml的key和控制台的key是否一致,检查AndroidManifest.xml中填写key时是否有空格存在。

  • 错误:NativeLoader: found libBaiduMapSDK_map_v5_1_0.so error 这种情况是因为缺少.so文件。解决办法:请按照官网开发引导去配置,也可以参考官网中的demo进行配置。

  • 错误:NativeLoader: loadException; NativeLoader: BaiduMapSDK_base_v5_1_0 Failed to load. 这种情况是so库加载失败,禁止不同架构下的.so文件串用。解决办法:请保证.so文件是在对应的架构文件夹下。

手把手教你集成Andriod百度地图SDK相关推荐

  1. android百度地图定位自定义图标,百度地图SDK集成及根据坐标实现定位(android studio开发)...

    百度地图SDK集成及根据坐标实现定位(android studio开发) 百度地图SDK集成及根据坐标实现定位(android studio开发) 1.下载百度地图SDK 链接:http://lbsy ...

  2. 公司考勤模块集成百度地图SDK

    百度地图SDK开发者网站: lbsyun.baidu.com/index.php?t- 一 申请密钥(安全码):需要 项目名称和bundle ID 网址:lbsyun.baidu.com/apicon ...

  3. 关于百度地图SDK的andriod开发的定位功能实现

    基于Android Studio的汽车定位追踪系统的设计 摘要:随着经济的发展和汽车化时代的到来,人们对于车辆的服务的智能化,便捷化提出了更高的要求.文章主要研究通过软件编写一个汽车定位追踪系统,并利 ...

  4. android 百度地图 在线建议查询,Android 百度地图 SDK v3_3_0 (五) ---POI搜索和在线建议查询功能...

    目前百度地图SDK所集成的检索服务包括:POI检索.公交信息查询.线路规划.地理编码.在线建议查询.短串分享. 本篇博客将先介绍POI检索和在线建议查询(在地图地位功能基础上实现的,还不知道定位的童靴 ...

  5. Android 百度地图 SDK v3.0.0 (一)

    转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/37729091 最近公司要把百度地图集成的项目中,于是我就研究了一天百度地图的SD ...

  6. Android 百度地图 SDK v3.0.0 (四) 引入离线地图功能

    转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/37758097 一直觉得地图应用支持离线地图很重要啊,我等移动2G屌丝,流量不易, ...

  7. 基于百度地图sdk的地图app开发(七)——导航和模拟导航

    这是基于百度地图sdk的地图app开发系列博客第七篇 代码仓库位置:https://github.com/YanhuiLu89/lmap.git 上一篇 基于百度地图sdk的地图app开发(六)--路 ...

  8. Android百度地图SDK 导航初始化和地图初始化引起的冲突

    如题,同样是百度地图SDK开发过程中遇到的一个问题,交代下背景: 开发了一款内嵌百度地图的应用,因此里面差不多将目前百度地图SDK开放的主要功能都用到了,定位,地图显示,覆盖物标示,POI搜索,行程路 ...

  9. Cocoapods制作pod时,依赖百度地图SDK的一些问题

    1.制作一个pod时,依赖了百度地图sdk(静态库),这个时候,Cocoapods会在百度地图sdk这个pod中的podspec中为项目配置百度地图sdk需要的系统动态库及静态库.编译新做的pod,得 ...

  10. H5使用百度地图SDK获取用户当前位置并且标记显示在地图

    代码实现功能: H5使用百度地图SDK获取用户当前位置并且标记显示在地图,点击该标记弹出一层自定义的HTML. 效果图: 代码: <!DOCTYPE html> <html>& ...

最新文章

  1. HttpHand和HttpModule的详细解释,包括Asp.Net对Http请求的处理流程。
  2. ssh,FTP到远程服务器时,显示自定义的警告信息
  3. AI 芯片和传统芯片的区别
  4. go build命令详解
  5. javese 5 中的枚举类及单例模式
  6. 服务发现比较:Consul vs Zookeeper vs Etcd vs Eureka
  7. PetShop4.0的安装、设置、调试与体验(草稿)
  8. LeetCode-1208:尽可能使字符串相等
  9. 设计模式之单例模式介绍
  10. Trie 树内存消耗问题
  11. Mvc检查图片格式后上传
  12. ArrayList删除的问题
  13. 3dmax如何快速查找丢失贴图,并根据贴图快速找到对应物体
  14. eclipse不自动弹出提示的解决办法(eclipse alt+/快捷键失效)centos 6.7
  15. CS231n 计算机视觉(学习笔记)第一章(0723)
  16. Java爬堆糖图片爬虫
  17. 【时间序列分析】06. AR(p)序列的性质
  18. cipher加密解密
  19. 自适应业务提供的NGN业务体系结构项目调研论文(Draft1)
  20. firebase-admin的Java集成到服务器

热门文章

  1. 不是吧?DNSPod挪车码免费送?
  2. 网卡MAC地址是什么?
  3. 计算机比赛训练总结500字,比赛活动总结500字(精选7篇)
  4. 【渝粤教育】电大中专门店销售与服务技巧 (3)作业 题库
  5. NYOJ题目54 小明的存钱计划
  6. The end tag “</c:forEach“ is unbalanced
  7. sphinx(附demo)
  8. php theexcerpt,wordpress函数get_comment_excerpt()用法示例
  9. 那些出其不意给你惊喜的点,重新感受for循环的爱,来自C#
  10. Matlab学习手记——牛顿型信頼域法求解无约束问题