文档章节

Android 百度地图开发(一)

SunnyTime
 SunnyTime
发布于 2015/10/22 13:39
字数 995
阅读 170
收藏 0

现在好多手机应用开发需要使用到百度地图,在使用百度地图的过程和遇到的问题整理一下方便以后使用

申请密钥
使用白度地图首先需要申请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",命令,记住进入目录下.


申请密钥的其他步骤就不在此多说了.拿的密钥后我们就可以正式在我们的App中使用了.
正式开发
创建好项目后,首先将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文件.


今天就写到这里,后续我还会在继续使用百度地图踩踩坑,总结一下为新同学填坑.

版权声明:本文为博主原创文章,未经博主允许不得转载。

© 著作权归作者所有

共有 人打赏支持
SunnyTime
粉丝 6
博文 27
码字总数 17058
作品 0
静安
程序员
Android 百度地图开发(一)--- 申请API Key和在项目中显示百度地图

最近自己想研究下地图,本来想研究google Map,但是申请API key比较坑爹,于是从百度地图入手,其实他们的用法都差不多,本篇文章就带领大家在自己的Android项目中加入百度地图的功能,接下来...

等待流星
2013/12/10
0
1
百度地图SDK地图学习——实现定位功能

之前已经完成了百度地图SDK和百度定位SDK的配置。 http://my.oschina.net/u/1051634/blog/180880 实现百度定位的功能,最好仔细看看官方的文档,看了好几次才有点明白。 开发指南:http://de...

HenryHsu
2013/12/03
0
1
《老罗Android开发视频教程》老罗来交国庆的答卷了

  之前在博客园、开源中国、安卓巴士发表的《老罗将死,或者Android也将就换代,但是互联网的,共享,互助精神将永存》,计划出300集免费的、高质量的、全面的Android开发视频教程,得到了...

qixinghaitang
2012/10/09
0
2
Android Studio 获取 sha1、MD5签名

APP开发过程中使用百度地图 API , 申请 KEY 的时候需要开发者提供SHA1 证书指纹数据, 用Eclipse 可以直接查看,但是 Android Studio却不能,这个时候我们需要以下几步操作既可: 1.打开jav...

chenyy1203
06/28
0
0
Xamarin.Android 使用百度地图获取定位信息

最近做一个项目,web端使用百度地图,PDA使用手持机自带的GPS定位系统获取经纬度,然后再百度地图上显示该经纬度会有一定距离的差异,这里就像可乐的瓶子拧上雪碧的盖子,能拧的上却不美观。...

键盘演绎青春
07/25
0
0

没有更多内容

加载失败,请刷新页面

加载更多

可爱的python测试开发库(python测试开发工具库汇总)

欢迎转载,转载请注明来源: github地址 谢谢点赞 本文地址 相关书籍下载 测试开发 Web UI测试自动化 splinter - web UI测试工具,基于selnium封装。 链接 selenium - web UI自动化测试。 链...

python测试开发人工智能安全
55分钟前
2
0
Shiro | 实现权限验证完整版

写在前面的话 提及权限,就会想到安全,是一个十分棘手的话题。这里只是作为学校Shiro的一个记录,而不是,权限就应该这样设计之类的。 Shiro框架 1、Shiro是基于Apache开源的强大灵活的开源...

冯文议
今天
1
0
linux 系统的运行级别

运行级别 运行级别 | 含义 0 关机 1 单用户模式,可以想象为windows 的安全模式,主要用于修复系统 2 不完全的命令模式,不含NFS服务 3 完全的命令行模式,就是标准的字符界面 4 系统保留 5 ...

Linux学习笔记
今天
2
0
学习设计模式——命令模式

任何模式的出现,都是为了解决一些特定的场景的耦合问题,以达到对修改封闭,对扩展开放的效果。命令模式也不例外: 命令模式是为了解决命令的请求者和命令的实现者之间的耦合关系。 解决了这...

江左煤郎
今天
3
0
字典树收集(非线程安全,后续做线程安全改进)

将500W个单词放进一个数据结构进行存储,然后进行快速比对,判断一个单词是不是这个500W单词之中的;来了一个单词前缀,给出500w个单词中有多少个单词是该前缀. 1、这个需求首先需要设计好数据结...

算法之名
昨天
15
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部