转载请注明地址http://blog.csdn.net/xiaanming/article/details/11171581
最近自己想研究下地图,本来想研究google Map,但是申请API key比较坑爹,于是从百度地图入手,其实他们的用法都差不多,本篇文章就带领大家在自己的Android项目中加入百度地图的功能,接下来我会写一系列关于百度地图的文章,欢迎大家到时候关注!
一 申请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 -keystoreC:\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,就需要在工程中引用百度地图API开发包,下载地址http://developer.baidu.com/map/sdkandev-download.htm,下载Android SDKv2.1.3 lib库就行了
三、在Android项目中引用百度地图
-
新建Android项目BaiduMapDemo,然后将百度地图API库加入工程,如下图
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<com.baidu.mapapi.map.MapView
android:id="@+id/bmapView"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:clickable="true" />
</LinearLayout>
- 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();
}
}
- BMapManager是地图的引擎类,这个必须在setContentView方法之前被实例化,我们需要使用其方法init(String strKey,MKGeneralListener listener)来加入API key, MKGeneralListener 该接口返回网络状态,授权验证等结果,我们需要实现该接口以处理相应事件
-
MapView就是我们的地图控件了,MapView有和Activity同步的生命周期,例如onResume() ,onPause() ,onRestoreInstanceState(Bundle state) ,destroy()等,我们可以通过getController()方法获取地图控制器MapController,这个对象可用于控制和驱动平移和缩放等
- MapView有两个接口可以注册,分别是MKMapTouchListener(地图点击事件监听器),MKMapViewListener(地图监听器)上面的Demo我给MapView注册了MKMapViewListener,也简单实现了里面的几个方法,接下来我会带着大家详细的了解这里面的方法,希望大家到时候关注我的博客
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
好了,今天的讲解到此结束,有疑问的朋友请在下面留言。之后会持续介绍百度地图的使用,欢迎大家关注
分享到:
相关推荐
该资源主要参考博客http://blog.csdn.net/eastmount/article/details/42115735完成,它是android使用V2_4_1版本...这是2014年12月才获取的APIKey,因此最近申请的APIKey可以使用而不会出现只显示网格而没有地图现象。
将百度地图嵌入c# cs窗体中,cs...查了很多资料,参考网上众多朋友的代码及百度地图API demo,这个例子中的js代码不用key,方便很多,使用的是v1.4版,少了很多限制,使用.net4.5开发的,可以将c#代码转为低版本也行的。
android百度地图 import com.baidu.mapapi.SDKInitializer; import com.baidu.mapapi.map.BaiduMap; import com.baidu.mapapi.map.MapView; import android.app.Activity; import android.os.Bundle; import ...
将百度地图嵌入c# cs窗体中,... 查了很多资料,参考网上众多朋友的代码及百度地图API demo,这个例子中的js代码不用key,方便很多,使用的是v1.4版,少了很多限制,使用.net4.5开发的,可以将c#代码转为低版本也行的。
如何申请百度地图KEY
简单有效的实现,轻量级的百度导航,通过借口的使用百度app直接跳转到导航界面,里面的key是个人的,如果需要请自己到百度开发者平台申请
申请Android Google Map API key
用户在使用API之前需要获取百度地图移动版API Key,并且该KEY与您引用API的程序名称有关,具体流程请参照:申请API KEY 百度地图API支持Android 1.5及以上系统。 <1>API添加到Andoid工程中 必须显得下载API开发...
Laravel开发-laravel-api-key 使用API密钥向Laravel应用程序授权请求
地图可操作区域和控件显示,都被限制在地图设定的边界内; (6)您还可以参照开发文档控制比例尺的显示位置; ------------------------------------------------------------------------------------- 六、 Demo...
在百度地圖API官網申請key 粘貼到 DemoApplication.java strKey,如果打開后運行不了有感嘆號 選擇程序右擊 properties -> java Build Path ->order and Export 把里面的復選框都選上 ->ok
调用百度地图定位同时获取经纬度,应该要更改成自己的百度地图key值,还有手机别忘了开权限,打开GPS
需要到百度地图开发平台申请Android地图的Key 应用名:BaiduMap 包名:com.demo.map 含显示地图、检测网络配置、改变地图、实况图、热力图、改变地图中心、添加Marker、基本定位、POI检索等功能 仅供学习借鉴
异步获得百度地图 详细地址 城市 省份 街道,已打包成jar包,直接调用即可,不过需要你到百度地图官网注册一个秘钥(ak),这是调用百度地图必须的。使用方法: 1.manifest下声明service: <service android:name=...
这个工程我是测试过可以运行后才打包上传的,百度的key是用我自己的,代码参考百度地图的开发文档和别人的工程做的,有什么做的不好的地方,请见谅!
该程序使用的是android studio开发工具,该程序实现了调用百度地图API来显示地图的功能,下载使用请先去百度地图开发开放平台注册一个账号,创建一个应用,复制应用的AK替换在清单文件android:value="开发者 key"的...
百度地图3.0中心点位置选择,首先定位到当前位置,用户可拖动地图调整自己的位置,使用时请将自己的key写在manifest文件,并改成自己的包名,和使用自己申请key时用的keystore签名打包
赠送jar包:spring-data-keyvalue-2.5.5.jar; 赠送原API文档:spring-data-keyvalue-2.5.5-javadoc.jar; 赠送源代码:spring-data-key...人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。
赠送jar包:spring-data-keyvalue-2.6.1.jar; 赠送原API文档:spring-data-keyvalue-2.6.1-javadoc.jar; 赠送源代码:spring-data-key...人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。
说明:Android利用高德天气查询API实现天气查询功能,包括登录、注册需要的Web端(Web端中稍微修改数据库配置和创建表),注意申请key,在高德控制台创建应用(一个Android,一个Web),为应用添加key,在服务平台...