15.百度地图

旧SDK:

旧key申请网页:http://developer.baidu.com/map/android-mobile-apply-key.htm

添加jar包,可以直接将sample程序中的jar包拷进来

用法:

  1. public interface ConstantValue { String KEY = "1A4A4ABEFBEECD8C17DEE880C4EA69B9607020B5"; } <com.baidu.mapapi.map.MapView android:id="@+id/mapview" android:layout_width="wrap_content" android:layout_height="wrap_content"/> public class HelloWorld extends Activity { private static final String TAG = "HelloWorld"; private BMapManager manager; private MapView mapView; private MapController controller; int latitude = (int) (40.051 * 1E6);// 纬度 int longitude = (int) (116.303 * 1E6);// 经度 GeoPoint hmPos = new GeoPoint(latitude, longitude);// 黑马 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // 校验KEY initManager(); setContentView(R.layout.common); // 设置地图的缩放级别(V2.X3,19 V1.X 3,18) // V2.X与V1.X 主要区别 // ①修改了地图文件的格式,优化了地图(110 15) // ②增加了级别,3D(18,19) // MapController 管理具体的某一个Mapview:旋转、缩放、移动 mapView = (MapView) findViewById(R.id.mapview); controller = mapView.getController(); controller.setZoom(12);// 设置地图的缩放级别。 这个值的取值范围是[3,19] // 在mapview上添加一组缩放按钮 // mapview.add(view) mapView.setBuiltInZoomControls(true); controller.setCenter(hmPos);// 坐标 经纬度 } @Override public boolean onKeyDown(int keyCode, KeyEvent event) { // 旋转、缩放、移动 switch (keyCode) { case KeyEvent.KEYCODE_1: // 放大 controller.zoomIn();// 一次放大一个级别 break; case KeyEvent.KEYCODE_2: // 缩小 controller.zoomOut(); break; case KeyEvent.KEYCODE_3: // 以一个点为中心旋转 int rotation = mapView.getMapRotation();// 获取当前的角度 Log.d(TAG, "rotation="+ rotation);// -180~180 controller.setRotation(rotation+30); break; case KeyEvent.KEYCODE_4: // 以一条直线为轴 旋转 俯角(overlooking) int overlooking = mapView.getMapOverlooking(); Log.d(TAG, "overlooking=" + overlooking);// -45~0 controller.setOverlooking(overlooking-5); break; case KeyEvent.KEYCODE_5: // 移动 controller.animateTo(new GeoPoint(40065796,116349868)); break; default: break; } return super.onKeyDown(keyCode, event); } private void initManager() { manager = new BMapManager(getApplicationContext()); /** * public boolean init(String strKey, MKGeneralListener listener) 参数: * strKey - 申请的授权验证码(null,"") listener - 注册回调事件 该接口返回网络状态,授权验证结果 */ manager.init(ConstantValue.KEY, new MKGeneralListener() { // MKEvent @Override public void onGetPermissionState(int iError) { // 授权验证 if (iError == MKEvent.ERROR_PERMISSION_DENIED) { Toast.makeText(getApplicationContext(), "验证失败", 0).show(); } } @Override public void onGetNetworkState(int iError) { // 网络状态 if (iError == MKEvent.ERROR_NETWORK_CONNECT) { Toast.makeText(getApplicationContext(), "无网络", 0).show(); } } }); } @Override protected void onResume() { mapView.onResume(); super.onResume(); } @Override protected void onPause() { mapView.onPause(); super.onPause(); } @Override protected void onDestroy() { mapView.destroy(); super.onDestroy(); } }

新SDK:

申请新key

  1. 打开命令行,cd 到 .android目录下
  2. 输入命令,路径根据自己电脑进行修改,C:\Users\lenovo\.android>"C:\Program Files\Java\jdk1.6.0_45\bin\keytool.exe" -list -v -keystore debug.keystore
  3. 输入密码:android
  4. 拷贝SHA1值,如:48:8C:D9:43:56:81:C4:10:10:40:B6:C3:0A:A1:84:A9:65:65:9A:5A
  5. 安全码就是SHA1值+“;”+packagename(即:数字签名+分号+包名),分号必须是英文的,包名是AndroidManifest.xml里面的package值

如:48:8C:D9:43:56:81:C4:10:10:40:B6:C3:0A:A1:84:A9:65:65:9A:5A;cn.itheima.bdmaphm36

我的

"D:\jdk\bin\keytool.exe" -list -v -keystore debug.keystore

 SHA1: 51:18:C7:9F:D3:9D:6E:85:F8:13:55:B2:18:7F:2E:C7:16:63:E7:40

用法:

在application中添加开发密钥

  1. <application <meta-data android:name="com.baidu.lbsapi.API_KEY" android:value="开发者 key" /> </application>

添加所需权限

  1. <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" />

布局文件中添加地图控件

<com.baidu.mapapi.map.MapView
android:id="@+id/id_bmapView"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:clickable="true" />

在应用程序创建时初始化 SDK引用的Context 全局变量:

  1. @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); // 在使用SDK各组件之前初始化context信息,传入ApplicationContext // 注意该方法要再setContentView方法之前实现 SDKInitializer.initialize(getApplicationContext()); setContentView(R.layout.activity_main); }

不过地图很耗电,所以有必要管理其声明周期

public class MainActivity extends Activity
{
	private MapView mMapView = null;
	@Override
	protected void onCreate(Bundle savedInstanceState)
	{
		super.onCreate(savedInstanceState);
		requestWindowFeature(Window.FEATURE_NO_TITLE);
		// 在使用SDK各组件之前初始化context信息,传入ApplicationContext
		// 注意该方法要再setContentView方法之前实现
		SDKInitializer.initialize(getApplicationContext());
		setContentView(R.layout.activity_main);
		// 获取地图控件引用
		mMapView = (MapView) findViewById(R.id.id_bmapView);
	}
	@Override
	protected void onDestroy()
	{
		super.onDestroy();
		// 在activity执行onDestroy时执行mMapView.onDestroy(),实现地图生命周期管理
		mMapView.onDestroy();
		mMapView = null;
	}
	@Override
	protected void onResume()
	{
		super.onResume();
		// 在activity执行onResume时执行mMapView. onResume (),实现地图生命周期管理
		mMapView.onResume();
	}
	@Override
	protected void onPause()
	{
		super.onPause();
		// 在activity执行onPause时执行mMapView. onPause (),实现地图生命周期管理
		mMapView.onPause();
	}
}

更多介绍:http://blog.csdn.net/lmj623565791/article/details/37730469

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Android干货园

【PageLayout】非常简单的一键切换加载-空数据-错误页,支持自定义

Android中经常使用一个空白页和网络错误页用来提高用户体验,给用户一个较好的感官,如果获取到的数据为空,那么会显示一个空白数据页,如果在获取数据的过程中网络...

1143
来自专栏移动端开发

Android学习--ListView

这篇文章用于总结自己这两天学到的安卓的ListView和RecyclerView 的笔记,以及从我这个iOS开发者的角度去理解和学习这两个控件,会比较一下他们个...

2239
来自专栏学海无涯

Android开发之那些好用的数据结构与API(二)

在 Android开发之那些好用的数据结构与API 一文中提到了Android中一些好用的数据结构和API,这次继续补充几个我在项目中用到的好用的但是不是人人都...

3506
来自专栏李蔚蓬的专栏

Android实战_note1(MyMirror_一款小型摄像处理的App)

1.1 Activity.java全文: 注意代码中的注释,其中 handler.sendEmptyMessageDelayed(1,3000);...

952
来自专栏郭霖

Android ListView异步加载图片乱序问题,原因分析及解决方案

在Android所有系统自带的控件当中,ListView这个控件算是用法比较复杂的了,关键是用法复杂也就算了,它还经常会出现一些稀奇古怪的问题,让人非常头疼。比...

39610
来自专栏Samego开发资源

Android车轮之图片加载框架Android-Universal-Image-Loader

1465
来自专栏移动开发

android:excludeFromRecents 属性需要注意的小地方

在 Android 系统中,如果我们不想某个 Activity 出现在 “Recent screes” 中,可以设置属性 android:excludeFro...

1943
来自专栏编程之路

羊皮书APP(Android版)开发系列(二十三)10分钟单例模式实战-Glide图片加载库封装工具类

1115
来自专栏腾讯Bugly的专栏

Android APP 快速 Pad 化实现

如何能在最快的时间内,实现一个最新版本 Android app 的 pad 化呢?从拿到一个大型手机 app 代码开始开发到第一个其全新 pad 版本的发布,我...

5796
来自专栏Android干货

Android横屏下Fragment界面重叠问题

3055

扫码关注云+社区

领取腾讯云代金券