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());
}
}
}
想要什麼定位資訊随便取,我需要的隻是經緯度,是以覺得官方的文檔太詳細了