Android開發項目時經常會遇到定位這個功能, 好久之前寫過一篇了,官方也更新了一些東西,我也更新下html
之前使用的是jar包 導入來實現高德定位android
老版本 連接:http://www.javashuo.com/article/p-buermdac-gh.htmlgit
如今經過Gradle集成SDK(也可使用jar包)github
//定位依賴 implementation 'com.amap.api:location:latest.integration'
以後到高德申請key值,登陸打開控制檯 點擊建立應用,如圖:api
填寫相應信息,緩存
名稱,PackageName:項目的包名,至於SHA1安全碼能夠這樣獲取,能夠 Window+R 打開控制檯 輸入cmd點擊肯定安全
以後在彈框中完成如下操做就能夠看到SHA1安全碼了網絡
上圖的密鑰庫口令默認的是:android (注:輸入口令是看不見的,輸入完成Enter便可)app
以上是測試版獲取SHA1,發佈版SHA1獲取請看博客 Android Studio apk打包,keystore.jks文件生成,根據keystore密鑰獲取SHA1安全碼ide
輸入完信息肯定就能夠看到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/android-map