[android] 百度地圖開發 (一).申請AK顯示地圖及解決顯示空白網格問題
阿新 • • 發佈:2017-05-28
定義 gps 官方 應用程序 2.x lns settings sap xmlns
近期做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",同一時候輸入安全碼!
這裏你可能疑惑"安全碼"是什麽? 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
當中最重要的是加入APIKey,方法mBMapManager.init(null)調用.
<meta-data
android:name="com.baidu.lbsapi.API_KEY"
android:value="QwaNhFQ0ty2QmdYh3Nrr0gQx">
</meta-data>
最後希望文章對大家有所幫助,這是我幫同學做百度地圖簡單研究的一篇基礎性文章,當中後面準備講講百度地圖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獲取.而包名就是應用程序相應的包名.例如以下:
點擊"提交"後就可以獲取的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.
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/container" android:layout_width="match_parent" android:layout_height="match_parent" tools:context="com.example.baidumapshow.MainActivity" tools:ignore="MergeRootFrame" > <com.baidu.mapapi.map.MapView android:id="@+id/map_view" android:layout_width="match_parent" android:layout_height="match_parent" android:clickable="true" /> </FrameLayout>2.MainActivity.java文件
public class MainActivity extends Activity { //BMapManager 對象管理地圖、定位、搜索功能 private BMapManager mBMapManager; //MapView 地圖主控件 private MapView mapView = null; //MapController 完畢地圖控制 private MapController mMapController = null; //MKMapViewListener 用於處理地圖事件回調 MKMapViewListener mMapListener = null; @Override protected 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(); } } }); } @Override protected void onResume() { mapView.onResume(); if (mBMapManager != null) { mBMapManager.start(); } super.onResume(); } @Override protected void onDestroy() { mapView.destroy(); if (mBMapManager != null) { mBMapManager.destroy(); mBMapManager = null; } super.onDestroy(); } @Override protected 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-sdk android: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" /> <application android: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> <activity android: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顯示地圖及解決顯示空白網格問題