[android] 百度地图开发 (一).申请AK显示地图及解决显示空白网格问题
生活随笔
收集整理的這篇文章主要介紹了
[android] 百度地图开发 (一).申请AK显示地图及解决显示空白网格问题
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
? ? 最近做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,選擇類型以前我們見過的博客書籍通常是選擇"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
public class MainActivity extends Activity {//BMapManager 對象管理地圖、定位、搜索功能private BMapManager mBMapManager; //MapView 地圖主控件 private MapView mapView = null; //MapController 完成地圖控制private MapController mMapController = null; //MKMapViewListener 用于處理地圖事件回調 MKMapViewListener mMapListener = null;@Overrideprotected 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();} } }); }@Overrideprotected void onResume() {mapView.onResume();if (mBMapManager != null) {mBMapManager.start();}super.onResume();}@Overrideprotected void onDestroy() {mapView.destroy();if (mBMapManager != null) {mBMapManager.destroy();mBMapManager = null;}super.onDestroy();}@Overrideprotected 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>?
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android"package="com.example.baidumapshow"android:versionCode="1"android:versionName="1.0" ><uses-sdkandroid:minSdkVersion="19"android:targetSdkVersion="19" /><!-- 獲取網絡狀態 --><uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /><!-- 訪問網絡 --><uses-permission android:name="android.permission.INTERNET" /><!-- 獲取WiFi狀態 --><uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /><uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /><!-- 允許程序寫入外部存儲,如SD卡上寫文件 --><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /><uses-permission android:name="android.permission.WRITE_SETTINGS" /><!-- 讀取電話狀態 --><uses-permission android:name="android.permission.READ_PHONE_STATE" /><uses-permission android:name="android.permission.CALL_PHONE" /><!-- 獲取精確位置 GPS芯片接收衛星的定位信息,定位精度達10米以內 --><uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /><!-- 通過WiFi或移動基站的方式獲取用戶錯略的經緯度信息 --><uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /><!-- 獲取模擬定位信息 --><uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION" /><uses-permission android:name="android.permission.ACCESS_GPS" /><applicationandroid:allowBackup="true"android:icon="@drawable/ic_launcher"android:label="@string/app_name"android:theme="@style/AppTheme" ><meta-data android:name="com.baidu.lbsapi.API_KEY" android:value="QwaNhFQ0ty2QmdYh3Nrr0gQx"></meta-data> <activityandroid:name="com.example.baidumapshow.MainActivity"android:label="@string/app_name" ><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity></application></manifest> ? ? 4.運行效果如下圖所示
? ?
? ??最后希望文章對大家有所幫助,這是我幫同學做百度地圖簡單研究的一篇基礎性文章,其中后面準備講講百度地圖POI興趣搜索和添加標注等功能吧!對于前面的問題我也不知道為什么總是顯示網格而沒有地圖,但是通過V2_4_1能顯示地圖.
? ? 我猜測其原因是以前申請的APIKey調用方法可以實現顯示地圖,但是由于百度新更新的SDK方法不兼容,現在申請的APIKey需要使用新的方法,故上面的才能顯示,個人意見,不知道是否正確啊!
??? (By:Eastmount 2014-12-22 夜2點?http://blog.csdn.net/eastmount/)
參考資料:
??? 1.郭霖大神《Android第一行代碼》第11章基于百度地圖的開發
??? 2.xiaanming大神文章?http://blog.csdn.net/xiaanming/article/details/11171581
??? 3.百度官方文檔和文庫?http://wenku.baidu.com/view/86bab0b3f524ccbff12184bd.html
??? 其中需要注意的是使用2.3.1時調用manager.init("APIKey",null)初始化地圖,而2.4.1版本是通過在AndroidManifest.xml的meta-data中輸入AK.
? ?PS:這僅僅是一篇Android開發百度地圖的基礎文章,網上資料也很多,但該方法可行.參考郭神《Android第一行代碼》中方法也是v2.3.1只能顯示網格而沒有地圖.
一.開發前申請APIKey
參考資料:
? ? 官方開發SDK指南?http://developer.baidu.com/map/sdkandev-14.htm
? ? 百度地圖申請密鑰?http://lbsyun.baidu.com/apiconsole/key
? ? 首先,注冊成為一名百度開發者.
? ?點擊"去創建應用>>",如下圖所示,這里顯示你的應用列表.
? ?此時點擊“創建應用”即可申請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地址:
??? http://developer.baidu.com/map/sdkandev-download.htm
? ? 在創建好的應用程序BaiduMapShow項目中libs目錄下復制baidumapapi_v2_4_1.jar文件,同時libs目錄下新建armeabi目錄,并拷貝libBaiduMapSDK_v2_4_1.so文件.如下圖所示:
三.源代碼顯示百度地圖
? ? 1.activity_main.xml布局文件
? ? 布局文件中通過加載百度地圖控件MapView,它是由百度提供的自定義控件故需要加上完整包名,同時該控件需要接受點擊事件clickable設置為true.
public class MainActivity extends Activity {//BMapManager 對象管理地圖、定位、搜索功能private BMapManager mBMapManager; //MapView 地圖主控件 private MapView mapView = null; //MapController 完成地圖控制private MapController mMapController = null; //MKMapViewListener 用于處理地圖事件回調 MKMapViewListener mMapListener = null;@Overrideprotected 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();} } }); }@Overrideprotected void onResume() {mapView.onResume();if (mBMapManager != null) {mBMapManager.start();}super.onResume();}@Overrideprotected void onDestroy() {mapView.destroy();if (mBMapManager != null) {mBMapManager.destroy();mBMapManager = null;}super.onDestroy();}@Overrideprotected 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>?
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android"package="com.example.baidumapshow"android:versionCode="1"android:versionName="1.0" ><uses-sdkandroid:minSdkVersion="19"android:targetSdkVersion="19" /><!-- 獲取網絡狀態 --><uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /><!-- 訪問網絡 --><uses-permission android:name="android.permission.INTERNET" /><!-- 獲取WiFi狀態 --><uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /><uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /><!-- 允許程序寫入外部存儲,如SD卡上寫文件 --><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /><uses-permission android:name="android.permission.WRITE_SETTINGS" /><!-- 讀取電話狀態 --><uses-permission android:name="android.permission.READ_PHONE_STATE" /><uses-permission android:name="android.permission.CALL_PHONE" /><!-- 獲取精確位置 GPS芯片接收衛星的定位信息,定位精度達10米以內 --><uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /><!-- 通過WiFi或移動基站的方式獲取用戶錯略的經緯度信息 --><uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /><!-- 獲取模擬定位信息 --><uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION" /><uses-permission android:name="android.permission.ACCESS_GPS" /><applicationandroid:allowBackup="true"android:icon="@drawable/ic_launcher"android:label="@string/app_name"android:theme="@style/AppTheme" ><meta-data android:name="com.baidu.lbsapi.API_KEY" android:value="QwaNhFQ0ty2QmdYh3Nrr0gQx"></meta-data> <activityandroid:name="com.example.baidumapshow.MainActivity"android:label="@string/app_name" ><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity></application></manifest> ? ? 4.運行效果如下圖所示
? ?
? ??最后希望文章對大家有所幫助,這是我幫同學做百度地圖簡單研究的一篇基礎性文章,其中后面準備講講百度地圖POI興趣搜索和添加標注等功能吧!對于前面的問題我也不知道為什么總是顯示網格而沒有地圖,但是通過V2_4_1能顯示地圖.
? ? 我猜測其原因是以前申請的APIKey調用方法可以實現顯示地圖,但是由于百度新更新的SDK方法不兼容,現在申請的APIKey需要使用新的方法,故上面的才能顯示,個人意見,不知道是否正確啊!
??? (By:Eastmount 2014-12-22 夜2點?http://blog.csdn.net/eastmount/)
參考資料:
??? 1.郭霖大神《Android第一行代碼》第11章基于百度地圖的開發
??? 2.xiaanming大神文章?http://blog.csdn.net/xiaanming/article/details/11171581
??? 3.百度官方文檔和文庫?http://wenku.baidu.com/view/86bab0b3f524ccbff12184bd.html
總結
以上是生活随笔為你收集整理的[android] 百度地图开发 (一).申请AK显示地图及解决显示空白网格问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [Android] AlertDialo
- 下一篇: [android] 百度地图开发 (二)