Android Studio導入並顯示國內地圖SDK步驟對比以及需要注意的點(百度地圖和高德地圖爲例)

本文爲第一次導入地圖類SDK,以百度地圖和高德地圖爲例,騰訊地圖後續加入。
本文若有不當之處以及勘誤,歡迎留言指正。

百度和高德地圖開放平臺官網鏈接

百度地圖開放平臺

高德開放平臺

步驟

1.獲取KEY

在相應的國內SDK開發者網站上獲取key

注意:

首次創建應用需要輸入的SHA1分兩種:測試版(又稱調試版,看各平臺的描述),

發佈版的KEY SHA1 值是不同的,發佈 apk 時需要根據發佈 apk 對應的 keystore 重新配置 Key。

by 高德地圖申請開發密鑰步驟

每個Key唯一對應一個APP

by 百度地圖申請開發密鑰步驟

此步驟通常需要輸入發佈版SHA1,獲取方法:

  1. 系統終端獲取
  2. AS中終端獲取

命令:keytool -v -list -keystore

2.配置

配置過程通常需要X步,

2.1:將SDK導入工程:添加so文件

導入so文件,有兩種方法:

第一種:新建文件目錄,工程會自動加載src目錄下的so文件

路徑:

appsrcmain\

  1. 新建jniLibs目錄
  2. 將各種架構的so文件(夾)拷貝進其中。

第二種:修改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博客

2.2 添加Jar文件/依賴代碼

此處則根據項目(工程)需求自行填加所需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

高德:開發指南-創建地圖-顯示地圖-第三步,初始化地圖容器

添加主要view

路徑

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語言進行標記以及引用各個部分的鏈接,百度開放平臺可以學習一下。

本文同時發表在我的個人博客:故事熊

歡迎評論留言以及觀光。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章