Android百度地圖API整合一《基礎地圖》,整合百度地圖api
在使用百度地圖API整合百度地圖時,碰到了一些坑,特開此貼記錄。。。
直接開始代碼
1.建立一個工程
建議使用AS!如果使用ES的話,會出現一個java.lang.NoClassDefFoundError: com.baidu.location.LocationClient 這種錯誤,在網上百度了半天時間,大都是同樣的一些答案,而且都解決不了問題!(這也是我很鬱悶的一件事,為什麼有些沒用的東西,有些人還瘋狂的轉來轉去。。。)所以,最終我還是選擇使用了AS。
2.進入百度地圖首頁
1)沒有帳號的話,申請一個百度帳號
2)下載百度地圖範例程式碼,並解壓(下載時可能會下載失敗,沒辦法,多下幾次吧。。。)
解壓如下
3.根據官方文檔Android地圖SDK,整合基礎的地圖頁面
1)擷取密鑰
* 點擊擷取密鑰
* 填寫資訊
應用程式名稱(在工程的value >> String.xml >> app_name)
SHA1值:命令列視窗 >> keytool -list -v -keystore FilePath (FilePath:C盤 >> 使用者 >> .android >> debug.keystore)
注意:如果運行報錯 203:校正碼錯誤
解決方案:1.將運行後的.apk檔案,複製出來,尾碼名更改為zip,並解壓
2.命令列視窗 >> keytool -printcert -file FilePath (FilePath:如)
3.拿到這個SHA1值,最好是去重新到百度地圖開放平台上重新建立一次應用,獲得一個新的密鑰(記得在AndroidManifest.xml中修改)
包名:AndroidManifest.xml中
* 得到一個密鑰
2) 配置
* 匯入jar包,並引用
* 在build.gradle >> android 中插入下面代碼
sourceSets { main { jniLibs.srcDirs = ['libs'] } }
* 在application中添加開發密鑰
<meta-data android:name="com.baidu.lbsapi.API_KEY" android:value="開發人員 key" /> <!-- 這個開發人員key,修改成我們上面建立應用獲得的密鑰即可 -->
* 添加要求的權限
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/><uses-permission android:name="android.permission.INTERNET"/><uses-permission android:name="com.android.launcher.permission.READ_SETTINGS" /><uses-permission android:name="android.permission.WAKE_LOCK"/><uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /><uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /><uses-permission android:name="android.permission.GET_TASKS" /><uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/><uses-permission android:name="android.permission.WRITE_SETTINGS" />
* 在布局xml檔案中添加地圖控制項
1 <com.baidu.mapapi.map.MapView 2 android:id="@+id/bmapView" 3 android:layout_width="fill_parent" 4 android:layout_height="fill_parent" 5 android:clickable="true" />
* 在應用程式建立時初始化 SDK引用的Context 全域變數,管理地圖生命週期
public class MainActivity extends Activity { MapView mMapView = null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //在使用SDK各組件之前初始化context資訊,傳入ApplicationContext //注意該方法要再setContentView方法之前實現 SDKInitializer.initialize(getApplicationContext()); setContentView(R.layout.activity_main); //擷取地圖控制項引用 mMapView = (MapView) findViewById(R.id.bmapView); } @Override protected void onDestroy() { super.onDestroy(); //在activity執行onDestroy時執行mMapView.onDestroy(),實現地圖生命週期管理 mMapView.onDestroy(); } @Override protected void onResume() { super.onResume(); //在activity執行onResume時執行mMapView. onResume (),實現地圖生命週期管理 mMapView.onResume(); } @Override protected void onPause() { super.onPause(); //在activity執行onPause時執行mMapView. onPause (),實現地圖生命週期管理 mMapView.onPause(); } }
完成以上步驟後,運行程式,即可在您的應用中顯示如下地圖: