做关于位置或者定位的app的时候免不了使用地图功能,本人最近由于项目的需求需要使用百度地图的一些功能,所以这几天研究了一下,现写一下blog记录一下,欢迎大家评论指正! 一、申请AK(API Key) 要想使用百度地图sdk,就必须申请一个百度地图的api key。申请流程挺简单的。
创建应用最重要的一步是【安全码】。安全码是有【数字签名】和【;】和【包名】组成。包名就是你所创建的项目的包的结构,是指AndroidManifest.xml中的manifest标签下的package的值。 数字签名指android的签名ZS的SHA1值。 获取数字签名有两种方法: 1. 第一种方法:使用eclipse查看。 打开eclipse的preferences菜单,在Android下的【Build】中可以看到SHA1的值
2. 第二种方法:使用keytool工具(jdk自带)查看。 在控制台下,输入【cd .android】,然后输入【keytool -list -v-keystore debug.keystore】回车,然后提示你输入【秘钥库口令】,输入【android】回车然后就会显示SHA1的值。
数字签名搞定了,然后创建应用就ok了。创建完成之后,应用列表中会显示相应的AK,也就是api key。 二、下载SDK开发包 三、在android项目中引用百度SDK 1. 将开发包中的jar包和so文件添加到libs文件下。
2. 在AndroidManifest.xml中添加开发秘钥和所需权限。 [java] view plaincopy
1. <application 2. android:allowBackup="true" 3. android:icon="@drawable/ic_launcher" 4. android:label="@string/app_name" 5. android:theme="@style/AppTheme" > 6. <meta-data 7. android:name="com.baidu.lbsapi.API_KEY" 8. android:value="填写你申请的AK" /> 权限: [java] view plaincopy
1. <!-- 百度API所需权限 --> 2. <uses-permission android:name="android.permission.GET_ACCOUNTS" /> 3. <uses-permission android:name="android.permission.USE_CREDENTIALS" /> 4. <uses-permission android:name="android.permission.MANAGE_ACCOUNTS" /> 5. <uses-permission android:name="android.permission.AUTHENTICATE_ACCOUNTS" /> 6. <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 7. <uses-permission android:name="android.permission.INTERNET" /> 8. <uses-permission android:name="com.android.launcher.permission.READ_SETTINGS" /> 9. <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /> 10. <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> 11. <uses-permission android:name="android.permission.READ_PHONE_STATE" /> 12. <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 13. <uses-permission android:name="android.permission.BROADCAST_STICKY" /> 14. <uses-permission android:name="android.permission.WRITE_SETTINGS" /> 15. <uses-permission android:name="android.permission.READ_PHONE_STATE" /> 3. 在布局文件中添加地图控件: [java] view plaincopy
1. <com.baidu.mapapi.map.MapView 2. android:id="@+id/bmapview" 3. android:layout_width="match_parent" 4. android:layout_height="match_parent" 5. android:clickable="true" /> 4. 在应用程序创建时初始化SDK引用的Context全局变量。 [java] view plaincopy
1. @Override 2. protected void onCreate(Bundle savedInstanceState) { 3. super.onCreate(savedInstanceState); 4. requestWindowFeature(Window.FEATURE_NO_TITLE); 5. // 6. SDKInitializer.initialize(getApplicationContext()); 7. setContentView(R.layout.activity_main); 8. init(); 9. } 这里需要注意一下:initialize方法中必须传入的是ApplicationContext,传入this,或者MAinActivity.this都不行,不然会报运行时异常,所以百度建议把该方法放到Application的初始化方法中。
然后重写activity的生命周期的几个方法来管理地图的生命周期。在activity的onResume、onPause、onDestory方法中分别执行mapview的onReusme、onPause、onDestory方法。 [java] view plaincopy
1. package com.bdmap.view; 2. import com.baidu.mapapi.SDKInitializer; 3. import com.baidu.mapapi.map.BaiduMap; 4. import com.baidu.mapapi.map.MapView; 5. import android.app.Activity; 6. import android.os.Bundle; 7. import android.view.View; 8. import android.view.Window; 9. public class MainActivity extends Activity { 10. // 百度地图控件 11. private MapView mMapView = null; 12. // 百度地图对象 13. private BaiduMap bdMap; 14. @Override 15. protected void onCreate(Bundle savedInstanceState) { 16. super.onCreate(savedInstanceState); 17. requestWindowFeature(Window.FEATURE_NO_TITLE); 18. // 19. SDKInitializer.initialize(getApplicationContext()); 20. setContentView(R.layout.activity_main); 21. init(); 22. } 23. 24. /** 25. * 初始化方法 26. */ 27. private void init() { 28. mMapView = (MapView) findViewById(R.id.bmapview); 29. } 30. @Override 31. protected void onResume() { 32. super.onResume(); 33. mMapView.onResume(); 34. } 35. @Override 36. protected void onPause() { 37. super.onPause(); 38. mMapView.onPause(); 39. } 40. @Override 41. protected void onDestroy() { 42. mMapView.onDestroy(); 43. mMapView = null; 44. super.onDestroy(); 45. } 46. }
完成以上步骤,此时就可以完成一个简单的”Hello Map“程序了。 三、普通地图和卫星地图切换 百度地图将地图的类型分为两种:普通矢量地图和卫星图。 [java] view plaincopy 1. mMapView = (MapView) findViewById(R.id.bmapView); 2. mBaiduMap = mMapView.getMap(); 3. //普通地图 4. mBaiduMap.setMapType(BaiduMap.MAP_TYPE_NORMAL); 5. //卫星地图 6. mBaiduMap.setMapType(BaiduMap.MAP_TYPE_SATELLITE); 四、显示实时交通图(路况图) [java] view plaincopy
1. //开启交通图 2. mBaiduMap.setTrafficEnabled(true); 五、显示热力图 热力图就是以特殊高亮的形式显示访客热衷的页面区域和访客所在的地理区域的图示。通俗来说就是显示地图上某一块区域的人的密集程度。
[java] view plaincopy 1. //开启热力图 2. mBaiduMap.setBaiduHeatMapEnabled(true);
|