定位所需权限AndroidManifest.XML配置
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
申请位置权限这里我使用xxpermissions依赖进行申请
implementation 'com.hjq:xxpermissions:5.2'
定位代码
XXPermissions.with(getActivity())//getActivity() 我是用的是fragment所以使用getActivity
.permission(Permission.ACCESS_FINE_LOCATION,ACCESS_COARSE_LOCATION)
.request(new OnPermission() {
@Override
public void hasPermission(List<String> granted, boolean isAll) {
initLoad();// 有定位权限
}
@Override
public void noPermission(List<String> denied, boolean quick) {
// 没有定位权限逻辑处理
}
});
private void initLoad() {
Location getlocation = getlocation(MyApplication.getContext());
// 获取经纬度
double latitude = getlocation.getLatitude();
double longitude = getlocation.getLongitude();
// 地理编辑器 如果想获取地理位置 使用地理编辑器将经纬度转换为省市区
Geocoder geocoder = new Geocoder(MyApplication.getContext(), Locale.getDefault());
try {
List<Address> fromLocation = geocoder.getFromLocation(latitude, longitude, 1);
Address address = fromLocation.get(0);
String mAddressLine = address.getAddressLine(0);
Log.i("xxx",mAddressLine.toString());
} catch (IOException e) {
e.printStackTrace();
}
}
private Location getlocation(Context context) {
LocationManager locationManager = (LocationManager) context.getSystemService(LOCATION_SERVICE);
// gps
@SuppressLint("MissingPermission") Location location = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);
// 网络定位
@SuppressLint("MissingPermission") Location lastKnownLocation = locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
return lastKnownLocation;
}