[android] 百度地圖開發 (一).申請AK顯示地圖及解決顯示空白網格問題

來源:互聯網
上載者:User

標籤:android開發   controls   初始化   通過   min   height   intern   class   縮放   

    近期做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

參考資料:
    官方開發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檔案.例如以所看到的:

    當中該project包名為com.eample.baidumapshow,libs檔案夾用於存放第三方Jar包,armeabi檔案夾存放NDK產生so檔案調用其C/C++函數庫.同一時候須要匯入jar包,右鍵project->"Properties(屬性)"->"Java構建路徑",例如以所看到的加入JAR.


三.源碼顯示百度地圖

    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();                }              }          });      }        @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-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顯示地圖及解決顯示空白網格問題

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.