在網上搜索過大量集成高德地圖的方案,和測試代碼,要麼就是博主抄來沒有測試過的代碼,要麼就是步驟不連續的,甚至包裹官網給出的解決方案都是欠缺相關步驟的(官網截圖都不知道多少年前的了,沒更新過),不斷碰碰磕磕地試錯,結合大量的博客的步驟,本身親測實現了集成高德地址sdk並使用來獲取app的定位地址。
這個自行百度,so easy,絕對不會出錯的。java
步驟流程:依次進入-》控制檯-》應用管理-》建立新應用-》添加新key
android
key名稱隨意寫,無關要緊
發佈版本安全碼SHA1請看下一步
json
若是在新建安卓項目的時候忘記包名,能夠經過AndroidManifest.xml文件來查看api
可是舒適提醒一下,來到如下截圖的步驟時,請記住這些信息(或者跟我同樣截圖記錄):
key store path路徑 和 Password密碼,以及 Alias 別名和Password密碼,
這幾個信息在後面須要代碼配置時用上的,這個細節甚至在高德官網都沒有給出任何提示給步驟,在這我也卡了好久。
緩存
keytool -v -list -keystore xxxx.jks(jks的路徑)
第三步就是你的安全SHA1碼
安全
官網地址:http://lbs.amap.com/api/andro...
下載解壓放置lis目錄中,在這特別注意須要添加進入環境變量中(不少博客不說明,對於我這小白太坑了)
添加jar包入環境變量:右鍵jar包-》Add As Library...(詳情操做參考:https://blog.csdn.net/s499820...)
網絡
這個配置不少博客都沒有提到的,很坑爹。以後在後面排查問題才搜索到這個博客說明,能夠參考(https://blog.csdn.net/zrf1335...)
這裏的四個信息storeFile file/storePassword/keyAlias/keyPassword就對應上面在成功jks時的四個信息了app
signingConfigs { //調試版的keystore debug { storeFile file("/Users/dfp/AndroidStudioProjects/demoProj/demoproj.jks") storePassword "123456" keyAlias "demoproj" keyPassword "123456" } //發佈版的keystore release { storeFile file("/Users/dfp/AndroidStudioProjects/demoProj/demoproj.jks") storePassword "123456" keyAlias "demoproj" keyPassword "123456" } }
這裏代碼能夠參考博客https://blog.csdn.net/code_be...ide
官網示例配置:https://lbs.amap.com/api/andr...測試
官網示例截圖,須要注意的是,<meta-data android:name="com.amap.api.v2.apikey" android:value="您的key"></meta-data>,value值裏面須要添加你在上面第二步驟生氣的key
個人完整配置示例
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.dfp.demoproj"> <uses-permission android:name="android.permission.INTERNET" /> <!--用於進行網絡定位--> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"></uses-permission> <!--用於訪問GPS定位--> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission> <!--獲取運營商信息,用於支持提供運營商信息相關的接口--> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission> <!--用於訪問wifi網絡信息,wifi信息會用於進行網絡定位--> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission> <!--這個權限用於獲取wifi的獲取權限,wifi信息會用來進行網絡定位--> <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"></uses-permission> <!--用於訪問網絡,網絡定位須要上網--> <uses-permission android:name="android.permission.INTERNET"></uses-permission> <!--用於讀取手機當前的狀態--> <uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permission> <!--寫入擴展存儲,向擴展卡寫入數據,用於寫入緩存定位數據--> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission> <!--用於申請調用A-GPS模塊--> <uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS"></uses-permission> <!--用於申請獲取藍牙信息進行室內定位--> <uses-permission android:name="android.permission.BLUETOOTH"></uses-permission> <uses-permission android:name="android.permission.BLUETOOTH_ADMIN"></uses-permission> <application android:networkSecurityConfig="@xml/network_security_config" android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/AppTheme"> <meta-data android:name="com.amap.api.v2.apikey" android:value="XXXXXXXXXX"></meta-data> <service android:name="com.amap.api.location.APSService"></service> <activity android:name=".MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <service android:name=".LongRunningService"> </service> <receiver android:name=".AlarmReceiver"> </receiver> </application> </manifest>
在MainActivity.java上照搬別人的測試代碼便可,官方案例我是在不會用
我抄的代碼示例
package com.example.dfp.demoproj; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; import com.amap.api.location.AMapLocation; import com.amap.api.location.AMapLocationClient; import com.amap.api.location.AMapLocationClientOption; import com.amap.api.location.AMapLocationListener; public class MainActivity extends AppCompatActivity { //聲明AMapLocationClient類對象 public AMapLocationClient mLocationClient = null; //聲明定位回調監聽器 public AMapLocationListener mLocationListener = new MyAMapLocationListener(); //聲明AMapLocationClientOption對象 public AMapLocationClientOption mLocationOption = null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); init(); } private void init() { //初始化定位 mLocationClient = new AMapLocationClient(getApplicationContext()); //設置定位回調監聽 mLocationClient.setLocationListener(mLocationListener); //初始化AMapLocationClientOption對象 mLocationOption = new AMapLocationClientOption(); //設置定位模式爲AMapLocationMode.Hight_Accuracy,高精度模式。 mLocationOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy); //獲取一次定位結果: //該方法默認爲false。 mLocationOption.setOnceLocation(false); //獲取最近3s內精度最高的一次定位結果: //設置setOnceLocationLatest(boolean b)接口爲true,啓動定位時SDK會返回最近3s內精度最高的一次定位結果。若是設置其爲true,setOnceLocation(boolean b)接口也會被設置爲true,反之不會,默認爲false。 mLocationOption.setOnceLocationLatest(true); //設置是否返回地址信息(默認返回地址信息) mLocationOption.setNeedAddress(true); //設置是否容許模擬位置,默認爲false,不容許模擬位置 mLocationOption.setMockEnable(false); //關閉緩存機制 mLocationOption.setLocationCacheEnable(false); //給定位客戶端對象設置定位參數 mLocationClient.setLocationOption(mLocationOption); //啓動定位 mLocationClient.startLocation(); } private class MyAMapLocationListener implements AMapLocationListener { @Override public void onLocationChanged(AMapLocation aMapLocation) { if (aMapLocation != null) { if (aMapLocation.getErrorCode() == 0) { Log.e("位置:", aMapLocation.getAddress()); } else { //定位失敗時,可經過ErrCode(錯誤碼)信息來肯定失敗的緣由,errInfo是錯誤信息,詳見錯誤碼錶。 Log.e("AmapError", "location Error, ErrCode:" + aMapLocation.getErrorCode() + ", errInfo:" + aMapLocation.getErrorInfo()); } } } } }
運行你的代碼在虛擬機(最好的真實機,我用得就是真實機測試)
Android Studio打印獲取到的定位信息: