Android 12 在位置相关的权限和 API 方面有重大变化。因为隐私保护越来越重要,应用程序需要申请新的位置权限并满足更严格的要求。如果您的应用程序使用位置信息,则需要适应这些变化,并修改应用程序以与 Android 12 兼容。
以下是一些可能与 Android 12 位置异常相关的代码示例:
LocationManager locationManager = (LocationManager)context.getSystemService(Context.LOCATION_SERVICE); locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 5000, 0, locationListener);
在 Android 12 中,您需要使用新的“ACCESS_FINE_LOCATION”权限来请求位置信息:
并且,您还需要添加以下代码以请求后台位置访问权限:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R && ActivityCompat.checkSelfPermission(context, Manifest.permission.ACCESS_BACKGROUND_LOCATION) != PackageManager.PERMISSION_GRANTED) { ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_BACKGROUND_LOCATION}, PERMISSIONS_REQUEST_CODE); }
if (ContextCompat.checkSelfPermission(context, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) { // Permission is not granted }
在 Android 12 中,您需要使用新的“ACCESS_FINE_LOCATION”权限来检查位置访问权限:
if (ContextCompat.checkSelfPermission(context, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) { // Permission is not granted }
LocationRequest locationRequest = new LocationRequest(); locationRequest.setInterval(10000); locationRequest.setFastestInterval(5000); locationRequest.setPriority(LocationRequest.PRIORITY_HIGH_ACCURACY);
FusedLocationProviderClient fusedLocationClient = LocationServices.getFusedLocationProviderClient(this); fusedLocationClient.requestLocationUpdates(locationRequest, locationCallback, Looper.getMainLooper());
在 Android 12 中,您需要使用新的“ACCESS_FINE_LOCATION”权限以及“ACCESS_BACKGROUND_LOCATION”权限来使用 Fused Location Provider API:
并且,您还需要添加以下代码以请求后台位置访问权限:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R && ActivityCompat.checkSelfPermission(context, Manifest.permission.ACCESS_BACKGROUND_LOCATION) != PackageManager.PERMISSION_GRANTED) { ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.ACCESS_BACKGROUND_LOCATION}, PERMISSIONS_REQUEST_CODE); }
希望这些代码示例可以帮助