[Androi Studio、百度地圖API]Android Studio中利用百度API實現百度地圖的基本定位以及基本雷點

大概十天前安卓課程需要做一個百度地圖的基本定位。跟着郭老師的一行代碼來的,講的很詳細,一步一步跟着來應該是沒問題的。但是出現了一個errorcode -11總是提示我的API KEY授權失敗。卡了三四五天、終於在結合了上個月的實驗後、突然頓悟。所以覺得:應該寫個博客來紀念一下這漫長的征途。(我也不知道爲什麼每次實驗我都能遇到別人遇不到的雷點(╯‵□′)╯炸彈!•••*~●)

就每一步大概分兩個部分講一下:關於怎麼操作、操作中應該注意或遇到的雷點。

1.註冊百度地圖API Key

百度地圖開放平臺(http://lbsyun.baidu.com/)->開發文檔->Android地圖SDK->獲取密鑰->創建應用

然後就到了下面這個頁面

應用名稱自己填一個自己想填的應用名即可(此處雷點:如果你對於同一個項目申請了多個key,那你這個應用名就應該有所區別)

發佈版SHA1和開發版SHA1其實時不同的,沒有發佈版SHA1,這裏申請key我們可以先都填上開發版的SHA1,如圖所示找到signingReport雙擊等待運行完畢後就會看到我們要的SHA1

至於包名要與Manifest文件下的package一致、然後提交就可以獲取到我們要的AK了

此處雷點:如果包名和SHA1值沒有填寫正確的話,加載百度地圖API時會授權失敗的,具體表現就是授權失敗的信息提示了(當然不同的授權失敗會有不同的errorcode提示,得根據不同的提示信息分析,出現網格不一定就是包名和SHA1錯誤)

2.導入百度API的jar包和相關更新

申請完以後我們要去下載相應的SDK,大家根據自己需求下載即可,我下載的是基礎地圖和基本定位。

然後解壓後將jar包和其餘五個文件夾複製到libs目錄下,並更新gradle(這樣我們的jar包纔可以使用,更新gradle:File->Sync Project with gradle file),如果是單獨將五個文件夾放置在main->jniLibs下,那還要去build.gradle裏面更新相應的資源(這個百度的demo裏面有說、如果要這樣做可以去跟着demo看看)

3.在manifest文件中提供相應的用戶權限和相關組件

這是實現百度地圖所需要的權限

此處雷點:這段權限要放在application標籤的前面、不然也會加載地圖失敗

<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"></uses-permission>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission>
<uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permission>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"
    tools:ignore="ProtectedPermissions"></uses-permission>
<uses-permission android:name="android.permission.WAKE_LOCK"></uses-permission>

獲取密鑰。<meta-data>裏面的value就是我們之前申請到的AK。

爲活動註冊一個百度地圖的service。

4.編寫MainActivity.java和activity_main.xml

看郭神的講解呢是從實現定位開始再來加載地圖,百度官方的講解呢是先從先實現地圖的加載再來實現當前位置的定位。個人覺得呢,按百度的來,先實現地圖加載。至少你能先驗證了自己的AK申請是沒問題的,不然跟我一樣寫完了一大堆後再加載地圖發現提示授權失敗。

所以,先在.xml裏面添加一個mapView控件

<com.baidu.mapapi.map.MapView
    android:id="@+id/bdmapview"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:clickable="true"/>

再在修改.Java文件,定義一個MapView和一個BaiduMap對象。

private MapView mapView;

private BaiduMap baiduMap;

進行SDK初始化和實例化MapView,再利用getMap()方法獲取地圖即可。最後實現生命週期管理。

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    SDKInitializer.initialize(getApplicationContext());
    setContentView(R.layout.activity_main);
    mapView = (MapView) findViewById(R.id.bdmapview);
    baiduMap = mapView.getMap();
}
@Override
protected void onResume() {
    super.onResume();
    mapView.onResume();
}

@Override
protected void onPause() {
    super.onPause();
    mapView.onPause();
}

@Override
protected void onDestroy() {
    super.onDestroy();
    mapView.onDestroy();
}

然後運行你就可以看見北京天安門啦。

5.實現當前位置定位

這個看着一行代碼一步一步來的,感覺再講太細緻的話就會太囉嗦了,所以直接奉上我的代碼,可以一邊看郭神一邊消化就好了。這是貼.java文件代碼的另一篇博客(因爲貼到一起實在是太長了(●ˇ∀ˇ●))。https://blog.csdn.net/weixin_41027614/article/details/105985986

6.雷點了!!!坑坑坑!!!

首先我先說明,如果要做這個實驗,最好最好掏出一個安卓機來做測試,因爲你根本不知道用模擬器前面有多少坑在等你。

百度地圖加載不了,只有網格!!!

如圖所示,可以實現當前位置的定位,但是加載不出來地圖。

然後報錯報錯報錯errocode -11,可以看出來Unable to resolve host "api.map.baidu.com",是無法解析這個域名所以進入adb shell用getprop|grep net.dns1查看模擬器的dns配置,果然根本沒有這個字段。然後覺得可能要切換到root以後才能看見。但是搞了好久root它進不去就是進不去,所以我把我的Android版本從10.0降到了6.0(6.0下Android模擬器的adb shell是默認root用戶運行的),然後查看dns,有了!!!

跑起來了我的小百度地圖,結果問題又來了:

當前位置漂浮在大西洋中,在幾內亞灣!!!

(很遺憾,可能由於太憤怒,忘記截圖了,反正就是在海上飄蕩)

關於這個我解決了很久,兩天,整整兩天,最後我沒有解決,我只能拿出來了我的華爲,一頓猛戳,然後跑起來了,就在我的頭頂的位置。(關於連接真機,就按一般博客上面講的來就行,可能會出現安卓設備不被AS識別爲安卓設備的情況,需要確認一下手機是否打開了USB調試,最好咯,裝個什麼360手機助手的,輕鬆解決安卓驅動問題)

另外一個小問題:權限很重要,高版本一點的安卓需要手動對運行時權限進行處理,在location、storage、phone_state三個權限要手動添加,或許你的代碼裏面有處理會出現獲取權限的對話框,但有時候它還是沒有添加上的,你需要去設置裏面手動爲應用添加這三個權限。打開GPS也是同理。

搞了這麼羅裏吧嗦,每次做實驗都是感覺無比痛苦,經常卡一些bug,但是每次一寫博客其實感覺也還好,就那麼幾步,這次卡了一個星期,我的五一小長假也都被折騰沒了。早日開學是沒希望了,望ddup。

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