<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.SET_WALLPAPER" />
定位权限
implementation 'com.google.android.gms:play-services-location:18.0.0'
implementation 'io.github.bmob:android-sdk:3.8.21'
implementation 'io.reactivex.rxjava2:rxjava:2.2.8'
implementation 'io.reactivex.rxjava2:rxandroid:2.1.1'
implementation 'com.squareup.okhttp3:okhttp:4.8.1'
implementation 'com.squareup.okio:okio:2.2.2'
implementation 'com.google.code.gson:gson:2.8.5'
implementation 'com.amap.api:location:4.7.2'
谷歌与高德的依赖(无谷歌插件的无法使用,不过我在后续的代码将这种异常抹去了)
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION)
!= PackageManager.PERMISSION_GRANTED
&& ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION)
!= PackageManager.PERMISSION_GRANTED) {
//请求定位权限
ActivityCompat.requestPermissions(this, new String[]{
Manifest.permission.ACCESS_FINE_LOCATION,
Manifest.permission.ACCESS_COARSE_LOCATION},
REQUEST_LOCATION_PERMISSION_CODE);
}
请求获取权限,配合后续代码
// 处理权限请求结果
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
switch (requestCode) {
case REQUEST_CODE_PERMISSIONS:
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
requestLocation();
} else {
Log.e(TAG, "Location permission denied");
}
break;
}
}
好了你现在获取到定位权限了
fusedLocationProviderClient = LocationServices.getFusedLocationProviderClient(this);
// 检查Google Play服务是否可用
GoogleApiAvailability apiAvailability = GoogleApiAvailability.getInstance();
int resultCode = apiAvailability.isGooglePlayServicesAvailable(this);
if (resultCode != ConnectionResult.SUCCESS) {
// Google Play服务不可用,尝试修复或提示用户安装
Log.e(TAG, "Google Play Services error: " + apiAvailability.getErrorString(resultCode));
} else {
// Google Play服务可用,检查并申请定位权限
if (checkPermission()) {
requestLocation();
} else {
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, REQUEST_CODE_PERMISSIONS);
}
}
// 添加
if (checkPermission()) {
requestLocation();
}
确定Google是否可用
// 检查定位权限是否已授权
private boolean checkPermission() {
return ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED;
}
// 申请定位权限
private void requestLocation() {
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
// TODO: Consider calling
// ActivityCompat#requestPermissions
// here to request the missing permissions, and then overriding
// public void onRequestPermissionsResult(int requestCode, String[] permissions,
// int[] grantResults)
// to handle the case where the user grants the permission. See the documentation
// for ActivityCompat#requestPermissions for more details.
return;
}
fusedLocationProviderClient.getLastLocation()
.addOnCompleteListener(new OnCompleteListener<Location>() {
@Override
public void onComplete(@NonNull Task<Location> task) {
if (task.isSuccessful() && task.getResult() != null) {
Location location = task.getResult();
double latitude = location.getLatitude(); // 获取纬度
double longitude = location.getLongitude(); // 获取经度
double northLatitude = 90 - latitude; // 获取对应的北纬坐标
Log.d(TAG, "latitude: " + latitude);
Log.d(TAG, "longitude: " + longitude);
Log.d(TAG, "northLatitude: " + northLatitude);
} else {
// 获取位置信息失败,进行相应处理
Log.e(TAG, "Error getting location: " + task.getException());
}
}
});
LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE);
Location location = locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
if (location != null) {
latitude2 = location.getLatitude();
longitude2 = location.getLongitude();
// 将经纬度信息展示在Logcat中
Log.d("MainActivity", "latitude: " + latitude2 + ", longitude: " + longitude2);
}
}
打印的Log中得到谷歌获取到的经度纬度与北纬,打印得到高德获取的经纬与北纬