天天看點

android 高德地圖定位擷取經緯度android 高德地圖定位擷取經緯度

android 高德地圖定位擷取經緯度

之前開發定位都是內建百度的,上司說要用高德的,沒辦法幹吧,官方的文檔太詳細了看着真累。

我們得先去官網注冊開發者賬号,建立應用,填寫自己項目的包名和SHA1,

SHA1怎麼擷取這個就是看官方的文檔了,比較詳細,然後生成key值下載下傳jar包到lib下

下面是代碼,有注釋

<!-- 地圖包、搜尋包需要的基礎權限 -->

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />

<!-- 定位包、導航包需要的額外權限(注:基礎權限也需要) -->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
           
AndroidManifest.xml 檔案的application标簽裡面添加
<meta-data
        android:name="com.amap.api.v2.apikey"
        android:value="填寫自己項目的key"></meta-data>

    <activity android:name=".activity.domeActivity"></activity>


 /*開啟定位*/
private void location() {
    //初始化定位
    mLocationClient = new AMapLocationClient(getApplicationContext());
    //設定定位回調監聽
    mLocationClient.setLocationListener(this);
    //初始化定位參數
    mLocationOption = new AMapLocationClientOption();
    //設定定位模式為Hight_Accuracy高精度模式,Battery_Saving為低功耗模式,Device_Sensors是僅裝置模式
    mLocationOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy);
    //設定是否傳回位址資訊(預設傳回位址資訊)
    mLocationOption.setNeedAddress(true);
    //設定是否隻定位一次,預設為false
    mLocationOption.setOnceLocation(true);
    //設定是否強制重新整理WIFI,預設為強制重新整理
    mLocationOption.setWifiActiveScan(true);
    //設定是否允許模拟位置,預設為false,不允許模拟位置
    mLocationOption.setMockEnable(false);
    //設定定位間隔,機關毫秒,預設為2000ms
    mLocationOption.setInterval(2000);
    //給定位用戶端對象設定定位參數
    mLocationClient.setLocationOption(mLocationOption);
    //啟動定位
    mLocationClient.startLocation();
}

 @Override
public void onLocationChanged(AMapLocation aMapLocation) {
    if (aMapLocation != null) {
        if (aMapLocation.getErrorCode() == 0) {
            //可在其中解析amapLocation擷取相應内容。

            aMapLocation.getLocationType();//擷取目前定位結果來源,如網絡定位結果,詳見定位類型表
            lat = aMapLocation.getLatitude();//擷取緯度
            lon = aMapLocation.getLongitude();//擷取經度
            aMapLocation.getAccuracy();//擷取精度資訊
            aMapLocation.getAddress();//位址,如果option中設定isNeedAddress為false,則沒有此結果,網絡定位結果中會有位址資訊,GPS定位不傳回位址資訊。
            aMapLocation.getCountry();//國家資訊
            aMapLocation.getProvince();//省資訊
            aMapLocation.getCity();//城市資訊
            aMapLocation.getDistrict();//城區資訊
            aMapLocation.getStreet();//街道資訊
            aMapLocation.getStreetNum();//街道門牌号資訊
            aMapLocation.getCityCode();//城市編碼
            aMapLocation.getAdCode();//地區編碼
            aMapLocation.getAoiName();//擷取目前定位點的AOI資訊
            //擷取定位時間
            SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            Date date = new Date(aMapLocation.getTime());
            df.format(date);


            // 如果不設定标志位,此時再拖動地圖時,它會不斷将地圖移動到目前的位置
            if (isFirstLoc) {
                //擷取定位資訊
                StringBuffer buffer = new StringBuffer();
                buffer.append(aMapLocation.getCountry() + ""
                        + aMapLocation.getProvince() + ""
                        + aMapLocation.getCity() + ""
                        + aMapLocation.getProvince() + ""
                        + aMapLocation.getDistrict() + ""
                        + aMapLocation.getStreet() + ""
                        + aMapLocation.getStreetNum());
                Toast.makeText(getApplicationContext(), buffer.toString(), Toast.LENGTH_LONG).show();
                isFirstLoc = false;
            }

        }else {
            //定位失敗時,可通過ErrCode(錯誤碼)資訊來确定失敗的原因,errInfo是錯誤資訊,詳見錯誤碼表。
            Log.e("地圖錯誤","定位失敗, 錯誤碼:" + aMapLocation.getErrorCode() + ", 錯誤資訊:"
                    + aMapLocation.getErrorInfo());
        }
    }
}
           
想要什麼定位資訊随便取,我需要的隻是經緯度,是以覺得官方的文檔太詳細了