Android10(Q)ACCESS_BACKGROUND_LOCATION权限
Android 10 (Q) ACCESS_BACKGROUND_LOCATION permission
我需要用户检查并设置 ACCESS_BACKGROUND_LOCATION ("Allow all the time") 的权限,而没有 "Allow only while using the app" 的选项。我的 GPS 跟踪应用程序需要继续访问位置,即使应用程序已最小化。
我已经拥有为 ACCESS_FINE_LOCATION 工作的权限 Android 9.
AndroidManifest.xml--------------------------------------------------->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />
TrackingActivity.java (need to include ACCESS_BACKGROUND_LOCATION)---->
private void permissionCheck1() {
int permissionCheck1 = ContextCompat.checkSelfPermission(this,
Manifest.permission.ACCESS_FINE_LOCATION);
if (permissionCheck1 != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this,
new String[]{Manifest.permission.ACCESS_FINE_LOCATION},
MY_PERMISSIONS_REQUEST_ACCESS_FINE_LOCATION);
} else {
grantedSetupGPSandMap();
}
}
如果可能的话,我需要唯一的权限选项是 "Allow all the time"。检查和设置权限时如何设置?
对于 Android 10,如果:
- 您省略了
ACCESS_BACKGROUND_LOCATION
,并且:
- 您使用在清单中设置
android:foregroundServiceType="location"
属性 的前台服务,然后:
系统将仅向用户提供 "Allow only while using the app" 和 "Deny" 选项,参考位置权限。
我知道这与您的要求完全相反,但重点是,在这种情况下,"Allow only while using the app" 的行为实际上与 "Allow all the time" 相同, 提供了上述前台服务是 运行.
即使应用程序不在屏幕上,您也可以接收位置更新。并且用户没有仅部分允许位置更新的选项;他们必须在完全允许或完全拒绝之间做出选择。
编辑
此答案还假设您的 targetSdkVersion
是 29。
我在清单中添加了“ACCESS_BACKGROUND_LOCATION”权限,但我在 Android 10 设备中遇到了同样的问题。 “始终允许”选项未显示在对话框中。
然后我在permissions array中添加了“ACCESS_BACKGROUND_LOCATION”权限,要求用户在运行时授予。现在显示所有三个选项。
ActivityCompat.requestPermissions(this@MainActivity, arrayOf(Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_BACKGROUND_LOCATION), MY_PERMISSIONS_REQUEST_LOCATION)
我需要用户检查并设置 ACCESS_BACKGROUND_LOCATION ("Allow all the time") 的权限,而没有 "Allow only while using the app" 的选项。我的 GPS 跟踪应用程序需要继续访问位置,即使应用程序已最小化。
我已经拥有为 ACCESS_FINE_LOCATION 工作的权限 Android 9.
AndroidManifest.xml--------------------------------------------------->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />
TrackingActivity.java (need to include ACCESS_BACKGROUND_LOCATION)---->
private void permissionCheck1() {
int permissionCheck1 = ContextCompat.checkSelfPermission(this,
Manifest.permission.ACCESS_FINE_LOCATION);
if (permissionCheck1 != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this,
new String[]{Manifest.permission.ACCESS_FINE_LOCATION},
MY_PERMISSIONS_REQUEST_ACCESS_FINE_LOCATION);
} else {
grantedSetupGPSandMap();
}
}
如果可能的话,我需要唯一的权限选项是 "Allow all the time"。检查和设置权限时如何设置?
对于 Android 10,如果:
- 您省略了
ACCESS_BACKGROUND_LOCATION
,并且: - 您使用在清单中设置
android:foregroundServiceType="location"
属性 的前台服务,然后:
系统将仅向用户提供 "Allow only while using the app" 和 "Deny" 选项,参考位置权限。
我知道这与您的要求完全相反,但重点是,在这种情况下,"Allow only while using the app" 的行为实际上与 "Allow all the time" 相同, 提供了上述前台服务是 运行.
即使应用程序不在屏幕上,您也可以接收位置更新。并且用户没有仅部分允许位置更新的选项;他们必须在完全允许或完全拒绝之间做出选择。
编辑
此答案还假设您的 targetSdkVersion
是 29。
我在清单中添加了“ACCESS_BACKGROUND_LOCATION”权限,但我在 Android 10 设备中遇到了同样的问题。 “始终允许”选项未显示在对话框中。
然后我在permissions array中添加了“ACCESS_BACKGROUND_LOCATION”权限,要求用户在运行时授予。现在显示所有三个选项。
ActivityCompat.requestPermissions(this@MainActivity, arrayOf(Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_BACKGROUND_LOCATION), MY_PERMISSIONS_REQUEST_LOCATION)