哈~ 好久沒來記筆記了矾湃,由于接手的他人的公司的項目集成了高德地圖定位恼蓬,突發(fā)心血來潮惊完,也來體驗體驗這個過程了。
瀏覽器搜索高德定位处硬,進入高德開放平臺小槐,注冊一個賬號,當然有高德開放平臺賬號的話就不用注冊了荷辕,登錄就OK
-
首先 進入自己賬戶的控制臺本股,獲取Key,進入自己賬戶的控制臺桐腌,創(chuàng)建一個新應用拄显。如果之前創(chuàng)建過應用,可直接跳過案站。
1
添加新Key(這里需要獲取SHA1,我的demo使用就是AS自帶的debug簽名文件蟆盐,按照官方的教程獲取它承边,然后把資料填寫完整)
然后就能在控制臺看到自己申請的 Key 啦~
-
接下來 下載sdk了,我就下了個定位SDK石挂,現(xiàn)在的版本是V3.7.0
image.png -
將jar包放入項目中l(wèi)ib下面博助,配置好 build.gradle 文件(我這里使用的是拷貝jar包的方式,當然官方開發(fā)文檔上還有添加SDK依賴的方式)
image.pngimage.png -
添加高德 Key 打開項目的 AndroidManifest.xml 文件中痹愚,添加代碼富岳,聲明service(每個app擁有自己單獨的定位service),當然把剛剛申請到的key填充進去:
image.png 聲明權(quán)限
<!--用于進行網(wǎng)絡定位-->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<!--用于訪問GPS定位-->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<!--用于獲取運營商信息拯腮,用于支持提供運營商信息相關(guān)的接口-->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<!--用于訪問wifi網(wǎng)絡信息窖式,wifi信息會用于進行網(wǎng)絡定位-->
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<!--用于獲取wifi的獲取權(quán)限,wifi信息會用來進行網(wǎng)絡定位-->
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<!--用于訪問網(wǎng)絡动壤,網(wǎng)絡定位需要上網(wǎng)-->
<uses-permission android:name="android.permission.INTERNET" />
<!--用于讀取手機當前的狀態(tài)-->
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<!--用于寫入緩存數(shù)據(jù)到擴展存儲卡-->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<!--用于申請調(diào)用A-GPS模塊-->
<uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" />
<!--用于申請獲取藍牙信息進行室內(nèi)定位-->
<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
有關(guān)代碼混淆萝喘,我這demo不需要代碼混淆了,如果需要的話琼懊,開發(fā)文檔上有詳細怎么配置(http://lbs.amap.com/api/android-location-sdk/guide/create-project/dev-attention)
最后 寫代碼開始了
寫了個專門定位的類阁簸,然后使用方法就是在需要定位的Acitivity或者Fragment implement LocationCallBack 即可
public class MapLocationHelper implements AMapLocationListener {
/**
* 聲明mlocationClient對象
*/
private AMapLocationClient mLocationClient;
/**
* 聲明mLocationOption對象
*/
public AMapLocationClientOption mLocationOption = null;
private LocationCallBack mLocationCallBack;
private Context mContext;
public MapLocationHelper(Context context) {
mContext = context;
initLocation();
}
public MapLocationHelper(Context context, LocationCallBack locationCallback) {
mContext = context;
mLocationCallBack = locationCallback;
initLocation();
}
/**
* 初始化定位參數(shù)
*/
private void initLocation() {
mLocationClient = new AMapLocationClient(mContext);
mLocationOption = new AMapLocationClientOption();
// 設置定位監(jiān)聽
mLocationClient.setLocationListener(this);
// 設置定位模式為高精度模式,Battery_Saving為低功耗模式哼丈,Device_Sensors是僅設備模式
mLocationOption.setLocationMode(AMapLocationClientOption.AMapLocationMode.Hight_Accuracy);
// 設置定位間隔,單位毫秒,默認為2000ms
mLocationOption.setInterval(2000);
// 設置定位參數(shù)
mLocationClient.setLocationOption(mLocationOption);
}
/**
* 設置回調(diào)
* @param locationCallBack
*/
public void setLocationCallBack(LocationCallBack locationCallBack){
mLocationCallBack = locationCallBack;
}
/**
* 開啟定位
*/
public void startMapLocation() {
if (!mLocationClient.isStarted()) {
mLocationClient.startLocation();
}
}
/**
* 停止定位服務
*/
public void stopMapLocation() {
if (mLocationClient.isStarted()) {
mLocationClient.stopLocation();
}
}
@Override
public void onLocationChanged(AMapLocation aMapLocation) {
if (aMapLocation != null) {
if (aMapLocation.getErrorCode() == 0) {
// 可在其中解析amapLocation獲取相應內(nèi)容启妹。
mLocationCallBack.onCallLocationSuc(aMapLocation);
stopMapLocation();
} else {
//定位失敗時,可通過ErrCode(錯誤碼)信息來確定失敗的原因削祈,errInfo是錯誤信息翅溺,詳見錯誤碼表脑漫。
Log.e("AmapError", "location Error, ErrCode:"
+ aMapLocation.getErrorCode() + ", errInfo:"
+ aMapLocation.getErrorInfo());
stopMapLocation();
}
} else {
stopMapLocation();
}
}
}
public interface LocationCallBack {
void onCallLocationSuc(AMapLocation location);
}
使用定位:
初始化:
MapLocationHelper helper = new MapLocationHelper(this, this);
helper.startMapLocation();
拿到定位數(shù)據(jù):
@Override
public void onCallLocationSuc(AMapLocation location) {
Log.d(TAG, "Address:" + location.getAddress());
Log.d(TAG, "City:" + location.getCity());
Log.d(TAG, "CityCode:" + location.getCityCode());
Log.d(TAG, "Country:" + location.getCountry());
Log.d(TAG, "Province:" + location.getProvince());
Log.d(TAG, "Latitude:" + location.getLatitude());
Log.d(TAG, "Longitude:" + location.getLongitude());
}
打印結(jié)果:OK!完結(jié)了咙崎!