android ------ 實現高德定位並獲取相應信息 ( 最新版高德SDK 和 Android SDK版本)

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

相關文章
相關標籤/搜索