我需要用户检查并设置对ACCESS_BACKGROUND_LOCATION的许可(“一直允许”),而不能选择“仅在使用该应用程序时允许”。即使最小化了我的GPS跟踪应用程序,也需要继续访问位置。
我已经具有使用Android 9的ACCESS_FINE_LOCATION的权限。
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();
}
}
如果可能的话,我需要唯一的权限选项是“一直允许”。在检查和设置权限时如何设置?
答案 0 :(得分:2)
对于Android 10,如果:
ACCESS_BACKGROUND_LOCATION
,并且:android:foregroundServiceType="location"
属性的前台服务,然后:参考位置许可,系统将仅向用户提供“仅在使用应用程序时允许”和“拒绝”选项。
我意识到这与您要求的完全相反,但是要点是,在这种情况下,“仅在使用应用程序时允许”的行为实际上就像“一直允许”,提供了上述前台服务正在运行。
即使该应用不在屏幕上,您也将能够接收位置更新。并且用户不能选择仅部分允许位置更新;他们必须在完全允许还是完全拒绝之间做出选择。
编辑
此答案还假设您的targetSdkVersion
是29。
答案 1 :(得分:0)
我在清单中添加了“ 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)