近期做android百度地图,可是使用baidumapapi_v2_3_1.jar和libBaiduMapSDK_v2_3_1.so显示百度地图时总是遇到问题——仅仅显示网格而没有显示地图,网络连接和APIKey申请都是正确的,就是不知道为什么不能显示,网上也有非常多人遇到这个问题,有的是SDK更新不兼容.并且网上非常多百度地图都是使用V2.3.1版本号,后来没有办法仅仅有通过baidumapapi_v2_4_1.jar完毕显示地图.

    当中须要注意的是使用2.3.1时调用manager.init("APIKey",null)初始化地图,而2.4.1版本号是通过在AndroidManifest.xml的meta-data中输入AK.

   PS:这不过一篇Android开发百度地图的基础文章,网上资料也非常多,但该方法可行.參考郭神《Android第一行代码》中方法也是v2.3.1只能显示网格而没有地图.



一.开发前申请APIKey

參考资料:

    官方开发SDK指南 http://developer.baidu.com/map/sdkandev-14.htm

   
百度地图申请密钥 
http://lbsyun.baidu.com/apiconsole/key

    首先,注冊成为一名百度开发人员.

   提交注冊成功后例如以下图所看到的.



   点击"去创建应用>>",例如以下图所看到的,这里显示你的应用列表.

   此时点击“创建应用”就可以申请APIKey,选择类型曾经我们见过的博客书籍一般是选择"for mobile"应用类型,这里已经没有该选项了,故我选择"for Android",同一时候输入安全码!



    这里你可能疑惑"安全码"是什么?

它是由"数字签名;包名"组成,当中数字签名是我们打包程序时keystore的SHA1指纹,通过点击Eclipse的"窗口(Window)->首选项(Preferences)->Android->Build"查看,同一时候也可參照上面官方文档链接通过cmd获取.而包名就是应用程序相应的包名.例如以下:

    E5:BA:71:31:9D:A3:BF:92:8D:2E:8F:3A:6D:0A:93:5B:3D:36:59:08;com.example.baidumapshow

   点击"提交"后就可以获取的AK:QwaNhFQ0ty2QmdYh3Nrr0gQx


二.配置项目调用SDK

   
下载Android SDK地址:

    http://developer.baidu.com/map/sdkandev-download.htm

    在创建好的应用程序BaiduMapShow项目中libs文件夹下复制baidumapapi_v2_4_1.jar文件,同一时候libs文件夹下新建armeabi文件夹,并拷贝libBaiduMapSDK_v2_4_1.so文件.例如以下图所看到的:

    当中该project包名为com.eample.baidumapshow,libs文件夹用于存放第三方Jar包,armeabi文件夹存放NDK生成so文件调用其C/C++函数库.同一时候须要导入jar包,右键project->"Properties(属性)"->"Java构建路径",例如以下图所看到的加入JAR.



三.源码显示百度地图

   
1.activity_main.xml布局文件

    布局文件里通过载入百度地图控件MapView,它是由百度提供的自己定义控件故须要加上完整包名,同一时候该控件须要接受点击事件clickable设置为true.

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="com.example.baidumapshow.MainActivity"
tools:ignore="MergeRootFrame" > <com.baidu.mapapi.map.MapView
android:id="@+id/map_view"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:clickable="true" /> </FrameLayout>

   
2.MainActivity.java文件

public class MainActivity extends Activity {

	//BMapManager 对象管理地图、定位、搜索功能
private BMapManager mBMapManager;
//MapView 地图主控件
private MapView mapView = null;
//MapController 完毕地图控制
private MapController mMapController = null;
//MKMapViewListener 用于处理地图事件回调
MKMapViewListener mMapListener = null; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); /**
* 创建对象BMapManager并初始化操作
* V2.3.1中init(APIKey,null) V2.4.1在AndroidManifest中赋值AK
* 注意 初始化操作在setContentView()前
*/
mBMapManager = new BMapManager(getApplication());
mBMapManager.init(null);
setContentView(R.layout.activity_main); mapView = (MapView) findViewById(R.id.map_view);
//获取地图控制器 取得MapController实例
mMapController = mapView.getController();
//设置地图是否响应点击事件
mMapController.enableClick(true);
//设置地图缩放级别 3-19级别 级别越高 信息越具体
mMapController.setZoom(16);
//显示内置缩放控件
mapView.setBuiltInZoomControls(true); /**
* 获取学校经纬度 设置地图中心点
*/
GeoPoint point = new GeoPoint((int)(39.96703 * 1E6), (int)(116.323772 * 1E6));
mMapController.setCenter(point);
mapView.regMapViewListener(mBMapManager, new MKMapViewListener() { /**
* 地图移动完毕时会回调此接口方法
*/
@Override
public void onMapMoveFinish() {
Toast.makeText(MainActivity.this, "地图移动", Toast.LENGTH_SHORT).show();
} /**
* 地图载入完毕回调此接口方法
*/
@Override
public void onMapLoadFinish() {
Toast.makeText(MainActivity.this, "地图载入", Toast.LENGTH_SHORT).show();
} /**
* 地图完毕带动画的操作(如: animationTo())后,此回调被触发
*/
@Override
public void onMapAnimationFinish() { } /**
* 当调用过 mMapView.getCurrentMap()后。此回调会被触发
* 可在此保存截图至存储设备
*/
@Override
public void onGetCurrentMap(Bitmap arg0) { } /**
* 点击地图上被标记的点回调此方法
*
*/
@Override
public void onClickMapPoi(MapPoi arg0) {
if (arg0 != null){
Toast.makeText(MainActivity.this, arg0.strText, Toast.LENGTH_SHORT).show();
}
}
});
} @Override
protected void onResume() {
mapView.onResume();
if (mBMapManager != null) {
mBMapManager.start();
}
super.onResume();
} @Override
protected void onDestroy() {
mapView.destroy();
if (mBMapManager != null) {
mBMapManager.destroy();
mBMapManager = null;
}
super.onDestroy();
} @Override
protected void onPause() {
mapView.onPause();
if (mBMapManager != null) {
mBMapManager.stop();
}
super.onPause();
}
}

3.AndroidManifest.xml中申明权限和APIKey

   当中最重要的是加入APIKey,方法mBMapManager.init(null)调用.

   <meta-data 

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

       android:value="QwaNhFQ0ty2QmdYh3Nrr0gQx">

   </meta-data>

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.baidumapshow"
android:versionCode="1"
android:versionName="1.0" > <uses-sdk
android:minSdkVersion="19"
android:targetSdkVersion="19" /> <!-- 获取网络状态 -->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<!-- 訪问网络 -->
<uses-permission android:name="android.permission.INTERNET" />
<!-- 获取WiFi状态 -->
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<!-- 同意程序写入外部存储,如SD卡上写文件 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_SETTINGS" />
<!-- 读取电话状态 -->
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.CALL_PHONE" />
<!-- 获取精确位置 GPS芯片接收卫星的定位信息,定位精度达10米以内 -->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<!-- 通过WiFi或移动基站的方式获取用户错略的经纬度信息 -->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<!-- 获取模拟定位信息 -->
<uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_GPS" /> <application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<meta-data
android:name="com.baidu.lbsapi.API_KEY"
android:value="QwaNhFQ0ty2QmdYh3Nrr0gQx">
</meta-data>
<activity
android:name="com.example.baidumapshow.MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application> </manifest>

   
4.执行效果例如以下图所看到的

   

    最后希望文章对大家有所帮助,这是我帮同学做百度地图简单研究的一篇基础性文章,当中后面准备讲讲百度地图POI兴趣搜索和加入标注等功能吧!对于前面的问题我也不知道为什么总是显示网格而没有地图,可是通过V2_4_1能显示地图.

    我推測其原因是曾经申请的APIKey调用方法能够实现显示地图,可是因为百度新更新的SDK方法不兼容,如今申请的APIKey须要使用新的方法,故上面的才干显示,个人意见,不知道是否正确啊!

    (By:Eastmount 2014-12-22 夜2点 http://blog.csdn.net/eastmount/)


參考资料:

    1.郭霖大神《Android第一行代码》第11章基于百度地图的开发

    2.xiaanming大神文章 http://blog.csdn.net/xiaanming/article/details/11171581

    3.百度官方文档和文库 http://wenku.baidu.com/view/86bab0b3f524ccbff12184bd.html

[android] 百度地图开发 (一).申请AK显示地图及解决显示空白网格问题的更多相关文章

  1. jvectormap地图开发和制作任意国家地图

    jvectormap官网上提供了世界地图和很多国家的地图,但不是所有国家的地图都有,比如沙特阿拉伯的国家地图就没有,怎么办呢? 在http://www.amcharts.com/svg-maps/上下 ...

  2. 地图开发笔记(一):百度地图介绍、使用和Qt内嵌地图Demo

    前言   Qt在地图方面的研发.   百度地图 介绍   百度的地图分为多个开发,都是在线的(离线的需要自己提取,本篇解说在线地图).  百度地图JavaScript API支持HTTP和HTTPS, ...

  3. Android 实践项目开发 总结

      Android 实践项目开发 总结 课程:移动平台应用开发实践  班级:201592  姓名:杨凤  学号:20159213 成绩:___________       指导老师:娄嘉鹏       ...

  4. 解决eclipse插件svn不显示svn信息和显示的信息为数字的问题

    1.选择window-->preferences如下图 通过上面步骤svn信息便显示了 2.解决显示的信息为数字问题 选择svn-label decoration format里面的author ...

  5. Android 百度地图开发(一)--- 申请API Key和在项目中显示百度地图

      标签: Android百度地图API Key  分类: Android 百度地图开发(2)    最近自己想研究下地图,本来想研究google Map,但是申请API key比较坑爹,于是从百度地 ...

  6. Android百度地图开发(一)之初体验

    转载请注明出处:http://blog.csdn.net/crazy1235/article/details/42614603 做关于位置或者定位的app的时候免不了使用地图功能,本人最近由于项目的需 ...

  7. Android百度地图开发01之初体验

    做关于位置或者定位的app的时候免不了使用地图功能,本人最近由于项目的需求需要使用百度地图的一些功能,所以这几天研究了一下,现写一下blog记录一下,欢迎大家评论指正! 一.申请AK(API Key) ...

  8. Android 百度地图开发之一(Hello BaiDu Map)

    之前也接触过百度地图的开发,但那是在网上找的案例或代码,而且是比较老的版本.打算重新学习一下百度地图的开发. 本次使用的百度地图的版本是 Android SDK v3.0.0 本篇文章主要讲述百度地图 ...

  9. Android 百度地图API(01)_开发环境 HelloBaiduMap

    转载于:http://blog.csdn.net/lmj623565791/article/details/37729091 转载于:http://blog.csdn.net/crazy1235/ar ...

随机推荐

  1. linux软链接与硬链接详解

    软连接 命令: ln -s 原文件 目标文件 特征: 1.相当于windows的快捷方式 2.只是一个符号连接,所以软连接文件大小都很小 3.当运行软连接的时候,会根据连接指向找到真正的文件,然后执行 ...

  2. Python学习笔记(4)列表

    2019-02-26 列表(list):①创建方法:用‘[ ]’,将数据包括起来,数据之间用逗号隔开.②空列表:empty = []③增删改查: 1)增加: a.append()方法——将元素添加到列 ...

  3. JS中的五种去重方法

    JS中的五种去重方法 第一种方法: 第二种方法:  第三种方法: 第四种方法: 第五种方法:优化遍历数组法 思路:获取没重复的最右一值放入新数组 * 方法的实现代码相当酷炫,* 实现思路:获取没重复的 ...

  4. java类的方法

    我前面说的都是类的属性,现在说类的方法: 类{ 属性:“类有什么” 方法:“类能做什么” } 首先我们在之前创建的学生类中添加个打印1-10数字的方法,参数是name package cuteSnow ...

  5. oracle 控制语句

    PL输出语句 set serverout on; -- 开启PL的输出语句功能declare n number:=1; -- 声明一个number型的变量n,并赋值为1 v varchar2(20): ...

  6. Python3 定时访问网页

    本系列文章由 @YhL_Leo 出品,转载请注明出处. 文章链接: http://blog.csdn.net/yhl_leo/article/details/50358695 如果我有一组网站,想要定 ...

  7. 在Windows系统下搭建Redis集群

    准备工作 需要4个部件:Redis.Ruby语言运行环境.Redis的Ruby驱动redis-xxxx.gem.创建Redis集群的工具redis-trib.rb.使用redis-trib.rb工具来 ...

  8. Mysql优化之优化工具profiling

    程序员的成长之路 2016-11-23 22:42 Mysql优化之优化工具profiling 前言 mysql优化技术: mysql优化不是做一个操作就可以的优化,它包含很多的细节,需要一点一点的优 ...

  9. java io包File类

    1.java io包File类, Java.io.File(File用于管理文件或目录: 所属套件:java.io)1)File对象,你只需在代码层次创建File对象,而不必关心计算机上真正是否存在对 ...

  10. [AngularJS]Chapter 8 秘籍诀窍

    <!DOCTYPE html> <html ng-app="myApp"> <head lang="en"> <met ...