在 Android 12 中, ACCESS_FINE_LOCATION 的权限申请发生了变化。在以前的版本中,如果用户已授予该权限,则应用程序将在尝试获取位置信息时自动获得该权限。但是在 Android 12 中,即使用户已授予该权限,应用程序也必须显式请求该权限并进行处理,否则便会返回 PERMISSION_DENIED。
以下是一些可能的解决方案:
// 检查该权限是否已授予
if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED) {
// 已授权,执行相关操作
} else {
// 请求权限
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, REQUEST_CODE);
}
请注意,如果我们只申请 ACCESS_COARSE_LOCATION 权限,则不必再显式请求 ACCESS_FINE_LOCATION,因为 ACCESS_COARSE_LOCATION 包括了 ACCESS_FINE_LOCATION 的功能。
希望这些解决方案可以帮助你解决问题。