博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[android] 百度地图开发 (一).申请AK显示地图及解决显示空白网格问题
阅读量:6714 次
发布时间:2019-06-25

本文共 5349 字,大约阅读时间需要 17 分钟。

    近期做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指南 
    百度地图申请密钥 
    首先,注冊成为一名百度开发人员.

   提交注冊成功后例如以下图所看到的.
   点击"去创建应用>>",例如以下图所看到的,这里显示你的应用列表.
   此时点击“创建应用”就可以申请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地址:

   
    在创建好的应用程序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.

    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> 
    4.执行效果例如以下图所看到的
   
    最后希望文章对大家有所帮助,这是我帮同学做百度地图简单研究的一篇基础性文章,当中后面准备讲讲百度地图POI兴趣搜索和加入标注等功能吧!对于前面的问题我也不知道为什么总是显示网格而没有地图,可是通过V2_4_1能显示地图.
    我推測其原因是曾经申请的APIKey调用方法能够实现显示地图,可是因为百度新更新的SDK方法不兼容,如今申请的APIKey须要使用新的方法,故上面的才干显示,个人意见,不知道是否正确啊!
    (By:Eastmount 2014-12-22 夜2点 
)
參考资料:
    1.郭霖大神《Android第一行代码》第11章基于百度地图的开发
    2.xiaanming大神文章 
    3.百度官方文档和文库 
你可能感兴趣的文章
py实现ftp
查看>>
3、异步编程-JS种事件队列的优先级
查看>>
关于C语言判断文件尾问题的探讨
查看>>
poj1243(经典dp)
查看>>
svn仓库转为git仓库
查看>>
跳转到指定的控制器
查看>>
cocoapod升级版本
查看>>
在正式800修改代码
查看>>
AngularJs的UI组件ui-Bootstrap分享(十三)——Progressbar
查看>>
用前序遍历递归构造二叉树
查看>>
JavaScript jQuery bootstrap css ajax
查看>>
组合选择器
查看>>
Understanding Angular’s $apply() and $digest()
查看>>
HTML之列表
查看>>
Global.asax文件说明
查看>>
(十六)SpringBoot之使用 Caching- - EhCache
查看>>
ubuntu制作apt源
查看>>
理解Java常量池
查看>>
JVM调优总结-调优方法
查看>>
微信小程序 watch监听数据变化 类似vue中的watch
查看>>