先去高德开发平台注册一下你的APP
清单文件中添加权限声明
<!--用于进行网络定位-->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<!--用于访问GPS定位-->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<!--获取运营商信息,用于支持提供运营商信息相关的接口-->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<!--用于访问wifi网络信息,wifi信息会用于进行网络定位-->
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<!--这个权限用于获取wifi的获取权限,wifi信息会用来进行网络定位-->
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
<!--用于访问网络,网络定位需要上网-->
<uses-permission android:name="android.permission.INTERNET"/>
<!--用于读取手机当前的状态-->
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<!--写入扩展存储,向扩展卡写入数据,用于写入缓存定位数据-->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<!--用于申请调用A-GPS模块-->
<uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS"/>
<!--用于申请获取蓝牙信息进行室内定位-->
<uses-permission android:name="android.permission.BLUETOOTH"/>
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>
还需要在清单文件中添加key值和高德服务
<!-- 高德地图 -->
<meta-data
android:name="com.amap.api.v2.apikey"
android:value="你的高德key值" />
<service android:name="com.amap.api.location.APSService"/>
在studio中添加关于高德的sign
最后抄一个高德的工具类
public OnLocationListenter onLocationListenter;
public AMapLocationClient aMapLocationClient;
/**
* 高德地图参数配置
*
* @return
*/
public AMapLocationClientOption parameterConfiguration() {
//初始化AMapLocationClientOption对象
AMapLocationClientOption mLocationOption = new AMapLocationClientOption();
//设置定位模式(采取高精度定位模式)
mLocationOption.setLocationMode(AMapLocationMode.Hight_Accuracy);
//设置单次定位
mLocationOption.setOnceLocation(true);
//获取3s内最精确的一次定位结果
mLocationOption.setOnceLocationLatest(true);
//设置是否返回地址信息(默认返回地址信息)
mLocationOption.setNeedAddress(true);
//设置是否允许模拟位置,默认为true,允许模拟位置
// mLocationOption.setMockEnable(true);
//单位是毫秒,默认30000毫秒,建议超时时间不要低于8000毫秒。
// mLocationOption.setHttpTimeOut(20000);
return mLocationOption;
}
/**
* 开始定位
*
* @return
*/
public void startLocation(Context context, OnLocationListenter onLocationListenter) {
this.onLocationListenter = onLocationListenter;
//初始化定位
aMapLocationClient = new AMapLocationClient(context);
//设置定位成功监听
aMapLocationClient.setLocationOption(parameterConfiguration());
//成功结果监听
aMapLocationClient.setLocationListener(aMapLocationListener);
//检测是否有GPS权限
AndPermission
.with(context)
.requestCode(100)
.permission(Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION)
.callback(permissionListener)
.start();
}
/**
* 定位监听
*/
public interface OnLocationListenter {
/**
* 获取经纬度
*
* @param longitude 经度
* @param latitude 纬度
*/
void getLatitudeAndLongitude(double longitude, double latitude);
}
AMapLocationListener aMapLocationListener = new AMapLocationListener() {
@Override
public void onLocationChanged(AMapLocation aMapLocation) {
if (onLocationListenter != null) {
aMapLocationClient.onDestroy();
onLocationListenter.getLatitudeAndLongitude(aMapLocation.getLongitude(), aMapLocation.getLatitude());
}
}
};
PermissionListener permissionListener = new PermissionListener() {
@Override
public void onSucceed(int requestCode, @NonNull List<String> grantPermissions) {
aMapLocationClient.startLocation();
}
@Override
public void onFailed(int requestCode, @NonNull List<String> deniedPermissions) {
//获取位置失败
if (onLocationListenter != null) {
onLocationListenter.getLatitudeAndLongitude(0, 0);
}
}
};