高德地圖定位功能在Android上的整合
阿新 • • 發佈:2019-01-03
First:
關聯高德地圖的SDK,Android Studio是在app build.gradle 中的dependencies 根節點下新增
compile 'com.amap.api:location:latest.integration'//定位
compile 'com.amap.api:search:latest.integration'//搜尋
compile 'com.amap.api:3dmap:latest.integration'//3D地圖
等語句,具體根據專案需求從官方api文件中查詢。eclipse 則是直接從官方下載相應的jar包貼上到lib資料夾下,然後再與專案關聯。
debug包的SHA1的獲取方式為cd .android (回車),keytool -list -v -keystore debug.keystore 具體如圖所示
其中釋出包的金鑰庫密碼為你打簽名包時的.jks檔案密碼,debug包的金鑰庫密碼正常都是android。(ps:Dos操作介面輸入密碼是沒有提示的)輸入完,回車就好了。PackageName的獲取就是在app目錄下AndroidManifest檔案中的包名。
Third:
在app目錄下的AndroidManifest檔案配置相關許可權以及key,key配置在application根節點下,具體為<meta-data android:name="com.amap.api.v2.apikey" android:value="key值" /> <service android:name="com.amap.api.location.APSService"/> <service android:name="com.amap.api.location.APSService"/>
相關的許可權主要為
<!--用於進行網路定位-->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"></uses-permission>
<!--用於訪問GPS定位-->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission>
<!--用於訪問wifi網路資訊,wifi資訊會用於進行網路定位-->
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></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>
因為定位許可權是危險許可權,在Android 6 以後都要在程式碼中動態請求,才會有效果。
Fourth:
封裝Location
import android.content.Context;
import com.amap.api.location.AMapLocationClient;
import com.amap.api.location.AMapLocationClientOption;
import com.amap.api.location.AMapLocationListener;
public class Location {
AMapLocationClient client;
AMapLocationClientOption option;
AMapLocationListener listener;
public Location(Context mContext, AMapLocationListener listener) {
this.client = new AMapLocationClient(mContext);
//初始化定位引數
option = new AMapLocationClientOption();
this.listener = listener;
init();
}
public void init() {
//設定定位監聽
client.setLocationListener(listener);
//設定定位模式為高精度模式,Battery_Saving為低功耗模式,Device_Sensors是僅裝置模式
option.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy);
//設定定位間隔,單位毫秒,預設為2000ms
option.setInterval(10000);
//設定定位引數
client.setLocationOption(option);
// 此方法為每隔固定時間會發起一次定位請求,為了減少電量消耗或網路流量消耗,
// 注意設定合適的定位時間的間隔(最小間隔支援為1000ms),並且在合適時間呼叫stopLocation()方法來取消定位請求
// 在定位結束後,在合適的生命週期呼叫onDestroy()方法
// 在單次定位情況下,定位無論成功與否,都無需呼叫stopLocation()方法移除請求,定位sdk內部會移除
//啟動定位
client.startLocation();
}
/**
* 銷燬Client
*/
public void destory() {
client.stopLocation();
client.onDestroy();
}
}
到這基本都完成了,小白一枚有什麼問題請多多包涵,繼續寫bug!!!