我在 Android 应用中无法准确检索用户位置,尤其是在较新的 Android 版本中。我根据 Stack Overflow 上的答案实施了一个解决方案,但是...
我在 Android 应用中无法准确检索用户位置,尤其是在较新的 Android 版本中。我根据 Stack Overflow 答案 ,但效果不如预期。
我不确定问题的根本原因。是由于最近的 Android 版本中位置权限处理方式的变更、我的代码中的权限实现不正确,还是 Stack Overflow 解决方案本身存在潜在问题?
您能否指导我解决此问题应采取的具体步骤,包括检查与权限相关的问题、验证位置服务和调试我的代码?
我特别感兴趣的是了解如何在较新的 Android 版本上正确处理位置权限以及任何可能解决兼容性问题的方法。
要在最新的 Android 15 中获取位置,您应该使用 Fused Location Provider API,它是 Google Play 服务的一部分。此 API 提供了一种简单有效的方法来获取设备的位置,具有高精度和低功耗。 步骤:
build.gradle
文件:
dependencies {
implementation 'com.google.android.gms:play-services-location:21.0.1'
}
XML
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
Java
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}, LOCATION_REQUEST_CODE);
return;
}
Java
private FusedLocationProviderClient fusedLocationClient;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
fusedLocationClient = LocationServices.getFusedLocationProviderClient(this);
}
Java
fusedLocationClient.getLastLocation()
.addOnSuccessListener(this, new OnSuccessListener<Location>() {
@Override
public void onSuccess(Location location) {
// Got last known location. In some rare situations, this can be null.
if (location != null) {
double latitude = location.getLatitude();
double longitude = location.getLongitude();
// Use the location data
}
}
});