本文爲第一次導入地圖類SDK,以百度地圖和高德地圖爲例,騰訊地圖後續加入。
本文如有不當之處以及勘誤,歡迎留言指正。php
百度地圖開放平臺java
高德開放平臺android
在相應的國內SDK開發者網站上獲取keygit
注意:github
首次建立應用須要輸入的SHA1分兩種:測試版(又稱調試版,看各平臺的描述),api
發佈版的KEY SHA1 值是不一樣的,發佈 apk 時須要根據發佈 apk 對應的 keystore 從新配置 Key。
by 高德地圖申請開發密鑰步驟android-studio
每一個Key惟一對應一個APP
by 百度地圖申請開發密鑰步驟網絡
此步驟一般須要輸入發佈版SHA1,獲取方法:架構
命令:keytool -v -list -keystoreapp
配置過程一般須要X步,
導入so文件,有兩種方法:
第一種:新建文件目錄,工程會自動加載src目錄下的so文件
路徑:
appsrcmain\
第二種:修改gradle
applibs
新建libs,將各類架構的so文件(夾)拷貝進其中,以後在
appbuild.gradle中:
android { ... sourceSets{ main{ jniLibs.srcDir 'libs' //添加此行,說明so的路徑爲該libs路徑,關聯全部地圖SDK的so文件 } } ... }
注意:此代碼必須放在android括號內,不然會報錯:**
Could not get unknown property 'jniLibs' for source set 'main' of type
參考連接:CSDN博客
此處則根據項目(工程)需求自行填加所需jar。
有兩種方法:
在Project的build.gradle文件中配置repositories,添加maven/jcenter倉庫地址 路徑: appbuild.gradle
1. allprojects { 2. repositories { 3. jcenter() // 或者 mavenCentral() 4. } 5. }
主工程配置依賴,有兩種方式:
將jar放在libs目錄下,以後(如下兩步可選其一):
1.1: jar的每一個jar文件:右鍵-Add As Library
1.2: File -Project Structure-Project Structure-module app, 點擊 Dependencies,下方則會自動生成
相關依賴代碼:
dependencies{ compile files('libs/BaiduLBS_Android.jar') //百度地圖 }
注意:官方文檔中爲 compile,最新爲implementation,若輸入 compile則會出現如下報錯:
WARNING: Configuration 'compile' is obsolete and has been replaced with 'implementation' and 'api'.
建議輸入最新寫法。
第二種:
或者直接使用引入libs下全部jar包的方式:
注意:此方式libs無需導入jar包,即以上方法添加so文件第二正方法不適用。
高德-Android Studio 配置工程:注意說明了這一點,個人高德地圖集成彙總連接復現了這一點,出現如下報錯:
Cause: archive is not a ZIP archive
此處展現須要添加在地圖中的權限以及key添加的位置,因爲地圖不一致,因此只顯示其共同特色。
此處列舉出幾種地圖都須要的權限,可能會有所出入。
路徑
AndroidManifest.xml
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> <!--獲取設備網絡狀態,禁用後沒法獲取網絡狀態--> <uses-permission android:name="android.permission.INTERNET"/> <!--網絡權限,當禁用後,沒法進行檢索等相關業務--> <uses-permission android:name="android.permission.READ_PHONE_STATE" /> <!--讀取設備硬件信息,統計數據/讀寫手機狀態和身份--> <uses-permission android:name="com.android.launcher.permission.READ_SETTINGS" /> <!--讀取系統信息,包含系統版本等信息,用做統計--> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <!--獲取設備的網絡狀態,鑑權所需網絡代理,訪問WiFi網絡信息--> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <!--容許sd卡寫權限,需寫入地圖數據,禁用後沒法顯示地圖--> <uses-permission android:name="android.permission.WRITE_SETTINGS" /> <!--獲取統計數據--> <uses-permission android:name="android.permission.CAMERA" /> <!--使用步行AR導航,配置Camera權限--> <!--高德地圖--> <!--容許程序訪問CellID或WiFi熱點來獲取粗略的位置--> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
參考連接:
百度:Android 地圖SDK-Hello BaiduMap
路徑
appsrcmainreslayoutactivity_main.xml
此處不一樣地圖的寬和高,match_parent/fill_parent,至於爲何不一致,須要再探究。
<com.baidu.mapapi.map.MapView android:id="@+id/amapView/bmapView" //高德或百度地圖 android:layout_width="match_parent/fill_parent" //高德或百度地圖 android:layout_height="match_parent/fill_parent" //高德或百度地圖 android:clickable="true" /> //百度地圖獨有
合理管理地圖生命週期。
路徑
appsrcmainjavaMain.activity.java
public class MainActivity extends Activity { private MapView mMapView = null; //百度地圖 MapView mMapView = null; //高德地圖 @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(); } @Override //在這兩例中高德地圖獨有 protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); //在activity執行onSaveInstanceState時執行mMapView.onSaveInstanceState (outState),保存地圖當前的狀態 mMapView.onSaveInstanceState(outState); } } }
以上註釋引用自高德地圖—第三步,初始化地圖容器,有添加百度地圖第二行初始化代碼。
在添加主要view後百度地圖須要初始化以後便可顯示,
高德地圖在管理地圖生命週期後須要初始化地圖便可顯示,如下分別是他們的方法:
百度地圖初始化方法:
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); } }
高德地圖初始化方法:高德地圖-顯示地圖
//定義了一個地圖view mapView = (MapView) findViewById(R.id.map); mapView.onCreate(savedInstanceState);// 此方法須覆寫,虛擬機須要在不少狀況下保存地圖繪製的當前狀態。 //初始化地圖控制器對象 AMap aMap; if (aMap == null) { aMap = mapView.getMap(); }
注意:最新的Android Studio依照上述方法會報錯:錯誤: 可能還沒有初始化變量aMap
則須要修改成:
AMap aMap = null; if (aMap == null) { aMap = mapView.getMap(); } }
在百度地圖的開發教程中,首先配置,隨後Hello Baidumap一章便可顯示百度地圖在界面中,很方便的表現出了「次序」,所見即所得。
高德地圖文檔則首先配置,其次須要在建立地圖裏的顯示地圖中添加相應權限,以後在顯示地圖的過程當中再次包含了配置的過程,最後則顯示地圖,
此舉多是有考慮到開發者檢查是否正確,但根據個人連接,出現錯誤後直接在論壇上反饋,而並不是向下看,高德地圖在這一點上能夠標註一下。
高德地圖開發者文檔,則明顯地列舉出了步驟以及網頁,很好的使用了導航邏輯, 使得本文能夠順利的使用mardown語言進行標記以及引用各個部分的連接,百度開放平臺能夠學習一下。
本文同時發表在個人我的博客:故事熊
歡迎評論留言以及觀光。