目錄
一、註冊和獲取密鑰
什麼是密鑰
開發者在使用SDK之前需要獲取百度地圖移動版開發密鑰(AK),該AK與您的百度賬戶相關聯。請妥善保存您的AK,地圖初始化時需要使用AK。
獲取開發密鑰(AK)
百度地圖 SDK開發密鑰的申請地址爲:http://lbsyun.baidu.com/apiconsole/key
申請步驟大致可分爲如下四個步驟:
1若您未登錄百度賬號,請登錄您的百度賬號,如下圖:
(若您沒有百度賬號,點擊右下角根據提示註冊並登錄)
2登錄後將進入API控制檯,如下圖:
3點擊“創建應用”開始申請開發密鑰,如下圖:
4填寫應用名稱,注意應用類型選擇“Android SDK”、正確填寫SHA1 和 程序包名(SHA1和包名的獲取方法見下文)。如圖:
填寫清楚以上內容之後點擊提交會爲您生成該應用的AK,到這您就可以使用AK來完成您的開發工作了。
注意:同一個AK中,可以填寫開發版SHA1和發佈版SHA1,這樣app開發、測試到發佈整個過程中均不需要改動AK。
此功能完全兼容以前的AK,默認將原有的SHA1放在發佈版SHA1上,開發者也可自己更新,將原有的開發版本的AK和發佈版本的AK對應的SHA1值合併後使用。
獲取包名
根據您使用的開發工具,包名的獲取方式有所不同。
使用 Android Studio 開發
在app目錄下的build.gradle文件中找到applicationId,並確保其值與AndroidManifest.xml中定義的package相同。
注意:使用Android Studio開發,如遇到applicationId 與package不一致的情況,以appclicationid爲準。查看Android官方說明鏈接
獲取SHA1
調試版本(debug)和發佈版本(release)下的 SHA1 值是不同的,發佈 apk 時需要根據發佈 apk 對應的 keystore 重新配置 Key。(注意:我們這裏使用的是調試版本,在開發時請使用調試版本) 。
在Android Studio中添加release簽名信息。
會在根目錄的build.gradle中生成簽名信息,如下所示
使release配置生效, 需要添加以下信息。 signingConfig signingConfigs.release
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
signingConfig signingConfigs.release
}
}
點擊左側的signingReport,會生成release和debug的SHA1信息,如下所示。
將生成的SHA1填寫到註冊信息中以獲取密鑰。
二、Android Studio工程配置
創建AndroidStudio項目
在Android Studio中創建一個Android項目。
在項目中集成BaiduMap SDK
1下載開發包
普通的地圖服務和包含步騎行導航的地圖服務需要下載不同的開發包,點擊下載開發包。
1、下載普通開發包
第二行選擇基礎地圖服務
2、下載步騎行導航的開發包
第二行選擇步騎行導航(含基礎地圖)
注: 其他的功能(如定位服務、檢索功能、全景圖功能等則根據您的開發需要下載)
2將開發包拷貝至工程(截圖以普通地圖服務的開發包爲例,步騎行導航的開發包同理)
1、添加jar文件
打開解壓後的開發包文件夾,找到BaiduLBS_Android.jar文件將其拷貝至工程的app/libs目錄下,如圖:
2、添加so文件
在src/main/目錄下新建jniLibs目錄(如果您的項目中已經包含該目錄不用重複創建),在下載的開發包中拷貝項目中需要的CPU架構對應的so文件文件夾到jniLibs目錄,如圖:
這裏 我們只拷貝armabi和x86以減小包體積大小。
但得添加以下信息,以保證其它第三方庫也只生成這 兩種so庫,要不其它庫有x86-64,而地圖沒有會報錯崩潰。
3往工程中添加jar文件
在工程配置中需要將前面添加的jar文件集成到我們的工程中。
1、菜單欄選擇File -> Project Structure
2、在彈出的Project Structure對話框中選中左側的Modules列表下的app目錄,然後點擊右側頁面中的Dependencies選項卡。如圖:
3、點擊左下角加號“➕”選擇Jar dependency,然後選擇要添加的jar文件即可(此處爲我們拷貝至libs目錄下的BaiduLBS_Android.jar) 結果如圖:
完成上述操作之後在app目錄的build.gradle的dependencies塊中生成了工程所依賴的jar文件的對應說明,見方法一。
應用混淆
現在我們的應用中已經集成了百度地圖SDK,當我們在打包混淆的時候需要注意於BaiduMap SDK 相關的內容不應該被混淆,所以我們需要配置混淆文件。
1打開app目錄下的build.gradle文件,在release代碼塊中添加如下內容(若已經由Android Studio自動生成,則不用手動配置)
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
如在上面我們創建的MapActivity項目中:
若您的代碼包含debug版本並且也需要混淆的話,請在debug代碼塊中也添加上述代碼。
2編寫混淆文件,打開app目錄下的proguard-rules.pro文件,添加如下代碼。
-keep class com.baidu.** {*;}
-keep class mapsdkvi.com.** {*;}
-dontwarn com.baidu.**
注意:保證百度類不能被混淆,否則會出現網絡不可用等運行時異常。
三、HelloMap
百度地圖SDK爲開發者提供了便捷的使用百度地圖能力的接口,通過以下幾步操作,即可在您的應用中使用百度地圖:
1第一步 配置AndroidManifest.xml文件
1.在<application>中加入如下代碼配置開發密鑰(AK):
<application>
<meta-data
android:name="com.baidu.lbsapi.API_KEY"
android:value="開發者 key" />
</application>
若您還不曾申請開發密鑰,點此申請
2. 在<application/>外部添加如下權限聲明:
<!-- 訪問網絡,進行地圖相關業務數據請求,包括地圖數據,路線規劃,POI檢索等 -->
<uses-permission android:name="android.permission.INTERNET" />
<!-- 獲取網絡狀態,根據網絡狀態切換進行數據請求網絡轉換 -->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<!-- 讀取外置存儲。如果開發者使用了so動態加載功能並且把so文件放在了外置存儲區域,則需要申請該權限,否則不需要 -->
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<!-- 寫外置存儲。如果開發者使用了離線地圖,並且數據寫在外置存儲區域,則需要申請該權限 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
注:自Android6.0起部分權限的使用需要開發者在代碼中動態申請。
2第二步 在佈局文件中添加地圖容器
MapView是View的一個子類,用於在Android View中放置地圖。MapView的使用方法與Android提供的其他View一樣。
<com.baidu.mapapi.map.MapView
android:id="@+id/bmapView"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:clickable="true" />
3第三步 地圖初始化
注意:在SDK各功能組件使用之前都需要調用“SDKInitializer.initialize(getApplicationContext())”,因此建議在應用創建時初始化SDK引用的Context爲全局變量。
新建一個自定義的Application,在其onCreate方法中完成SDK的初始化。示例代碼如下:
public class DemoApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
//在使用SDK各組件之前初始化context信息,傳入ApplicationContext
SDKInitializer.initialize(this);
//自4.3.0起,百度地圖SDK所有接口均支持百度座標和國測局座標,用此方法設置您使用的座標類型.
//包括BD09LL和GCJ02兩種座標,默認是BD09LL座標。
SDKInitializer.setCoordType(CoordType.BD09LL);
}
}
在AndroidManifest.xml文件中聲明該Application
4創建地圖Activity,管理MapView生命週期
注意:在項目中使用地圖的時候要特別注意合理地管理地圖生命週期,這非常重要。
以下示例代碼簡述對地圖生命週期的管理:
public class MainActivity extends Activity {
private MapView mMapView = null;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//獲取地圖控件引用
mMapView = (MapView) findViewById(R.id.bmapView);
}
@Override
protected void onResume() {
super.onResume();
//在activity執行onResume時執行mMapView. onResume (),實現地圖生命週期管理
mMapView.onResume();
}
@Override
protected void onPause() {
super.onPause();
//在activity執行onPause時執行mMapView. onPause (),實現地圖生命週期管理
mMapView.onPause();
}
@Override
protected void onDestroy() {
super.onDestroy();
//在activity執行onDestroy時執行mMapView.onDestroy(),實現地圖生命週期管理
mMapView.onDestroy();
}
}
完成以上工作即可在您的應用中顯示地圖:
如果顯示結果是方格,並不顯示地圖,需要檢查SHA1、包名及密鑰是否填寫正確,或者Application在Manifest中是否註冊生效。
四、切換地圖類型
地圖類型
百度地圖SDK爲您提供了3種類型的地圖資源(普通矢量地圖、衛星圖和空白地圖),BaiduMap 類提供圖層類型常量,詳細如下:
類型名稱 | 說明 |
---|---|
MAP_TYPE_NORMAL | 普通地圖(包含3D地圖) |
MAP_TYPE_SATELLITE | 衛星圖 |
MAP_TYPE_NONE | 空白地圖 |
開發者可以利用BaiduMap中的setMapType()方法來設置地圖類型,下面做簡單展示。
普通地圖
基礎的道路地圖。 顯示道路、建築物、綠地以及河流等重要的自然特徵。
設置普通地圖的代碼如下:
mMapView = (MapView) findViewById(R.id.bmapView);
mBaiduMap = mMapView.getMap();
//普通地圖 ,mBaiduMap是地圖控制器對象
mBaiduMap.setMapType(BaiduMap.MAP_TYPE_NORMAL);
顯示的效果如下:
衛星地圖
顯示衛星照片數據。
設置衛星地圖的代碼如下:
mMapView = (MapView) findViewById(R.id.bmapView);
mBaiduMap = mMapView.getMap();
//衛星地圖
mBaiduMap.setMapType(BaiduMap.MAP_TYPE_SATELLITE);
顯示的效果如下:
注意:衛星圖只支持縮放到20級。