博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android 百度地图开发(一)--- 申请API Key和在项目中显示百度地图
阅读量:6571 次
发布时间:2019-06-24

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

转载请注明地址

近期自己想研究下地图,本来想研究google Map,可是申请API key比較坑爹,于是从百度地图入手,事实上他们的使用方法都差点儿相同,本篇文章就带领大家在自己的Android项目中增加百度地图的功能,接下来我会写一系列关于百度地图的文章,欢迎大家到时候关注!

一 申请API key

  • 在使用百度地图之前,我们必须去申请一个百度地图的API key,申请地址,自己自行注冊一个百度账号,非常快就能申请到的,例如以下图

  • 点击"创建密钥",系统将为我们自己主动生成密钥,当然我们在使用密钥之前还必须配置,点击"设置"例如以下图

Key type 选择“for mobile”,安全码是Android签名证书的证书指纹 (SHA1)值 + “;” + 你的应用程序包名,所以当你配置好了API key 你不能任意更换应用程序的包名, 假设更换了包名我们须要又一次配置API key,接下来我们来介绍怎么获取数字签名

我们知道我们开发的Android程序是须要给他签名的,假设没有签名是不同意被安装到手机或者模拟器的,那么你会有疑问,我寻常开发的应用确实没签名,怎么能在模拟器或者手机上直接执行呢,事实上ADT会自己主动的使用debug密钥为应用程序签名,当然你也能够自己创建一个属于你自己的密钥,直接用Eclipse可视化创建即可了,非常方便的,这里我就不介绍了

  • 这里我们用debug.keystore来生成Android签名证书的证书指纹 (SHA1)值能够在eclipse中直接查看:winows -> preferance -> android -> build。 例如以下图示

然后我们使用keytool工具来获取签名证书的sha1值,在DOS输入keytool -list -keystore C:\Users\bds\.android\debug.keystore红色部分为debug.keystore的路径,接下来会要你输入输入密钥库口令,默认输入“android”,这样子我们就能获取证书指纹 (SHA1),例如以下图

红色框框里面的东西就是我们须要的Android签名证书的证书指纹 (SHA1)值,然后我们复制出来,输入到API key的安全码输入框里面,再用分号隔开加上你的应用程序包名,如  02:5C:80:25:B2:8F:6F:60:54:B9:F4:B2:EF:94:FF:EE:CC:3C:5A:29;com.example.baidumapdemo 这样子我们就配置好了API key

下载百度地图API库

要在Android应用中使用百度地图API,就须要在project中引用百度地图API开发包,下载地址,下载即可了

三、在Android项目中引用百度地图

  • 新建Android项目 BaiduMapDemo,然后将百度地图API库增加project,例如以下图

  • 在布局文件里增加百度地图控件,

  • Activity界面代码,凝视的非常具体,相信你看得懂

package com.example.baidumapdemo;import android.app.Activity;import android.graphics.Bitmap;import android.os.Bundle;import android.widget.Toast;import com.baidu.mapapi.BMapManager;import com.baidu.mapapi.MKGeneralListener;import com.baidu.mapapi.map.MKEvent;import com.baidu.mapapi.map.MKMapViewListener;import com.baidu.mapapi.map.MapController;import com.baidu.mapapi.map.MapPoi;import com.baidu.mapapi.map.MapView;import com.baidu.platform.comapi.basestruct.GeoPoint;public class MainActivity extends Activity {	private Toast mToast;	private BMapManager mBMapManager;	/**	 * MapView 是地图主控件	 */	private MapView mMapView = null;	/**	 * 用MapController完毕地图控制	 */	private MapController mMapController = null;	/**	 * MKMapViewListener 用于处理地图事件回调	 */	MKMapViewListener mMapListener = null;	@Override	protected void onCreate(Bundle savedInstanceState) {		super.onCreate(savedInstanceState);		/**		 * 使用地图sdk前需先初始化BMapManager,这个必须在setContentView()先初始化		 */		mBMapManager = new BMapManager(this);				//第一个參数是API key,		//第二个參数是经常使用事件监听,用来处理通常的网络错误,授权验证错误等,你也能够不增加这个回调接口		mBMapManager.init("7ae13368159d6a513eaa7a17b9413b4b", new MKGeneralListener() {						//授权错误的时候调用的回调函数			@Override			public void onGetPermissionState(int iError) {				if (iError ==  MKEvent.ERROR_PERMISSION_DENIED) {					showToast("API KEY错误, 请检查!");	            }			}						//一些网络状态的错误处理回调函数			@Override			public void onGetNetworkState(int iError) {				if (iError == MKEvent.ERROR_NETWORK_CONNECT) {					Toast.makeText(getApplication(), "您的网络出错啦!", Toast.LENGTH_LONG).show();	            }			}		});						setContentView(R.layout.activity_main);				mMapView = (MapView) findViewById(R.id.bmapView);				  /**         * 获取地图控制器         */        mMapController = mMapView.getController();        /**         *  设置地图是否响应点击事件  .         */        mMapController.enableClick(true);        /**         * 设置地图缩放级别         */        mMapController.setZoom(12);                /**         * 显示内置缩放控件         */        mMapView.setBuiltInZoomControls(true);                /**         * 保存精度和纬度的类,         */        GeoPoint p = new GeoPoint((int)(22.547923 * 1E6), (int)(114.067368 * 1E6));        //设置p地方为中心点        mMapController.setCenter(p);        mMapView.regMapViewListener(mBMapManager, new MKMapViewListener() {			        	/**        	 * 地图移动完毕时会回调此接口 方法        	 */			@Override			public void onMapMoveFinish() {				showToast("地图移动完毕!");			}						/**			 * 地图载入完毕回调此接口方法			 */			@Override			public void onMapLoadFinish() {				showToast("地图载入完毕!");			}						/**			 *  地图完毕带动画的操作(如: animationTo())后,此回调被触发			 */			@Override			public void onMapAnimationFinish() {							}						/**			 *  当调用过 mMapView.getCurrentMap()后,此回调会被触发			 *  可在此保存截图至存储设备			 */			@Override			public void onGetCurrentMap(Bitmap arg0) {							}						/**			 * 点击地图上被标记的点回调此方法			 * 			 */			@Override			public void onClickMapPoi(MapPoi arg0) {				if (arg0 != null){					showToast(arg0.strText);				}			}		});	}		@Override	protected void onResume() {    	//MapView的生命周期与Activity同步,当activity挂起时需调用MapView.onPause()		mMapView.onResume();		super.onResume();	}	@Override	protected void onPause() {		//MapView的生命周期与Activity同步,当activity挂起时需调用MapView.onPause()		mMapView.onPause();		super.onPause();	}	@Override	protected void onDestroy() {		//MapView的生命周期与Activity同步,当activity销毁时需调用MapView.destroy()		mMapView.destroy();				//退出应用调用BMapManager的destroy()方法		if(mBMapManager != null){			mBMapManager.destroy();			mBMapManager = null;		}				super.onDestroy();	}			 /**      * 显示Toast消息      * @param msg      */      private void showToast(String msg){          if(mToast == null){              mToast = Toast.makeText(this, msg, Toast.LENGTH_SHORT);          }else{              mToast.setText(msg);              mToast.setDuration(Toast.LENGTH_SHORT);        }          mToast.show();      } 		}

  1. BMapManager是地图的引擎类,这个必须在setContentView方法之前被实例化,我们须要使用其方法init(String strKey,MKGeneralListener listener)来增加API key, MKGeneralListener  该接口返回网络状态,授权验证等结果,我们须要实现该接口以处理相应事件
  2. MapView就是我们的地图控件了,MapView有和Activity同步的生命周期,比如onResume() ,onPause() ,onRestoreInstanceState(Bundle state) ,destroy()等,我们能够通过getController()方法获取地图控制器MapController,这个对象可用于控制和驱动平移和缩放等
  3. MapView有两个接口能够注冊,各自是MKMapTouchListener(地图点击事件监听器),MKMapViewListener(地图监听器)上面的Demo我给MapView注冊了MKMapViewListener,也简单实现了里面的几个方法,接下来我会带着大家具体的了解这里面的方法,希望大家到时候关注我的博客

  • 当然,我们在程序执行之前,还必须增加相相应的权限
  • 执行结果

好了,今天的解说到此结束,有疑问的朋友请在以下留言。之后会持续介绍百度地图的使用,欢迎大家关注

你可能感兴趣的文章
Map集合案例
查看>>
python3 在不同操作系统安装第三方库方法
查看>>
spark shuffle:分区原理及相关的疑问
查看>>
Laravel5.5 使用第三方Vendor添加注册验证码
查看>>
mysql优化
查看>>
Gradle -help
查看>>
css3做的nav
查看>>
css选择器顺序的小技巧
查看>>
互联网架构师必备技术 Docker仓库与Java应用服务动态发布那些事
查看>>
Intellij IDEA 2018.2 搭建Spring Boot 应用
查看>>
SNMP AGENT函数介绍
查看>>
Git提交到多个远程仓库(多看两个文档)
查看>>
期末大作业
查看>>
[Usaco2005 Open]Disease Manangement 疾病管理 BZOJ1688
查看>>
【Android视图效果】分组列表实现吸顶效果
查看>>
title: postGreSQL 插件 timescaleDB 安装使用 date: 2019-02-14 18:02:23
查看>>
并发容器与框架——并发容器(一)
查看>>
网络编程socket
查看>>
学界 | 伯克利最新研究:用算法解决算法偏差?公平机器学习的延迟影响
查看>>
多文件上传示例源码(默认支持各种类型,包括图片)
查看>>