android ------ 實現高德定位並獲取相應資訊 ( 最新版高德SDK 和 Android SDK版本)
阿新 • • 發佈:2019-05-21
Android開發專案時常常會遇到定位這個功能, 很久以前寫過一篇了,官方也更新了一些東西,我也更新下
以前使用的是jar包 匯入來實現高德定位
老版本 連結:https://blog.csdn.net/DickyQie/article/details/56840100
現在通過Gradle整合SDK(也可以使用jar包)
//定位依賴
implementation 'com.amap.api:location:latest.integration'
之後到高德申請key值,登入開啟控制檯 點選建立應用,如圖:
填寫相應資訊,
名稱,PackageName:專案的包名,至於SHA1安全碼可以這樣獲取,可以 Window+R 開啟控制檯 輸入cmd點選確定
之後在彈框中完成以下操作就可以看到SHA1安全碼了
上圖的金鑰庫口令預設的是:android (注:輸入口令是看不見的,輸入完成Enter即可)
以上是測試版獲取SHA1,釋出版SHA1獲取請看部落格 Android Studio apk打包,keystore.jks檔案生成,根據keystore金鑰獲取SHA1安全碼
輸入完資訊確定就可以看到key值了
AndroidManifest.xml中加入許可權
複製程式碼 <!--用於進行網路定位--> <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>標籤中新增Key值資訊
<service android:name="com.amap.api.location.APSService"></service>
<meta-data android:name="com.amap.api.v2.apikey" android:value="2ca77496c8ae6b92cef9e15dfd68b87b">
</meta-data>
Activity程式碼:(和以前的相比少了很多不必要的程式碼)
/*** * 定位 */ private void showLocation() { try { mlocationClient = new AMapLocationClient(this); mLocationOption = new AMapLocationClientOption(); mlocationClient.setLocationListener(this); //設定定位模式為高精度模式,Battery_Saving為低功耗模式,Device_Sensors是僅裝置模式 mLocationOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy); mLocationOption.setInterval(5000); //設定定位引數 mlocationClient.setLocationOption(mLocationOption); //啟動定位 mlocationClient.startLocation(); } catch (Exception e) { } } @Override public void onLocationChanged(AMapLocation amapLocation) { try { if (amapLocation != null) { if (amapLocation.getErrorCode() == 0) { //定位成功回撥資訊,設定相關訊息 //獲取當前定位結果來源,如網路定位結果,詳見定位型別表 Log.i("定位型別", amapLocation.getLocationType() + ""); Log.i("獲取緯度", amapLocation.getLatitude() + ""); Log.i("獲取經度", amapLocation.getLongitude() + ""); Log.i("獲取精度資訊", amapLocation.getAccuracy() + ""); //如果option中設定isNeedAddress為false,則沒有此結果,網路定位結果中會有地址資訊,GPS定位不返回地址資訊。 Log.i("地址", amapLocation.getAddress()); Log.i("國家資訊", amapLocation.getCountry()); Log.i("省資訊", amapLocation.getProvince()); Log.i("城市資訊", amapLocation.getCity()); Log.i("城區資訊", amapLocation.getDistrict()); Log.i("街道資訊", amapLocation.getStreet()); Log.i("街道門牌號資訊", amapLocation.getStreetNum()); Log.i("城市編碼", amapLocation.getCityCode()); Log.i("地區編碼", amapLocation.getAdCode()); Log.i("獲取當前定位點的AOI資訊", amapLocation.getAoiName()); Log.i("獲取當前室內定位的建築物Id", amapLocation.getBuildingId()); Log.i("獲取當前室內定位的樓層", amapLocation.getFloor()); Log.i("獲取GPS的當前狀態", amapLocation.getGpsAccuracyStatus() + ""); //獲取定位時間 SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); Date date = new Date(amapLocation.getTime()); Log.i("獲取定位時間", df.format(date)); // 停止定位 mlocationClient.stopLocation(); } else { //定位失敗時,可通過ErrCode(錯誤碼)資訊來確定失敗的原因,errInfo是錯誤資訊,詳見錯誤碼錶。 Log.e("AmapError", "location Error, ErrCode:" + amapLocation.getErrorCode() + ", errInfo:" + amapLocation.getErrorInfo()); } } } catch (Exception e) { } } @Override protected void onStop() { super.onStop(); // 停止定位 if (null != mlocationClient) { mlocationClient.stopLocation(); } } /** * 銷燬定位 */ private void destroyLocation() { if (null != mlocationClient) { /** * 如果AMapLocationClient是在當前Activity例項化的, * 在Activity的onDestroy中一定要執行AMapLocationClient的onDestroy */ mlocationClient.onDestroy(); mlocationClient = null; } } @Override protected void onDestroy() { destroyLocation(); super.onDestroy(); }
執行得到日誌:
程式碼地址Github :https://github.com/DickyQie/and