我正在尝试为我的应用请求后台位置权限,但如果我请求后台位置,则位置权限对话框根本不会显示。如果我只请求粗略位置和精细位置,则权限对话框会正常显示。
清单:
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION"/>
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
字符串
验证码:
requestPermissionsIfNecessary(new String[]{
Manifest.permission.ACCESS_FINE_LOCATION,
Manifest.permission.ACCESS_COARSE_LOCATION,
Manifest.permission.ACCESS_BACKGROUND_LOCATION,
Manifest.permission.RECEIVE_BOOT_COMPLETED
});
...
...
private void requestPermissionsIfNecessary(String[] permissions) {
ArrayList<String> permissionsToRequest = new ArrayList<>();
for (String permission : permissions) {
if (ContextCompat.checkSelfPermission(this, permission)
!= PackageManager.PERMISSION_GRANTED) {
// Permission is not granted
permissionsToRequest.add(permission);
}
}
if (permissionsToRequest.size() > 0) {
ActivityCompat.requestPermissions(
this,
permissionsToRequest.toArray(new String[0]),
REQUEST_PERMISSIONS_REQUEST_CODE);
}
}
型
没有权限对话框出现此代码.但是,如果我注解了'后台'权限行,对话框出现,用户可以选择权限.相同的结果是否针对Android 11或12.那么我在这里错过了什么?
3条答案
按热度按时间6jjcrrmo1#
这是android 10的预期行为。后台位置权限不能从应用程序授予用户权限。相反,你应该告诉用户某种弹出窗口,并将用户重定向到设置页面。
mrphzbgm2#
好吧,在@alokHarman和其他线程的帮助下,我已经达到了以下(在OnCreate中):
字符串
我还指示用户更改此应用程序的电源设置,因为如果允许应用程序进入深度睡眠,则无论后台位置是否激活都无关紧要。
ekqde3dh3#
为了请求
ACCESS_BACKGROUND_LOCATION
,您首先需要请求ACCESS_FINE_LOCATION
和ACCESS_COARSE_LOCATION
。在获得这些权限后,您可以请求ACCESS_BACKGROUND_LOCATION
,它会将您重定向到位置权限设置。如果您接受ALLOW_ALL_THE_TIME选项,则授予后台位置权限。查看下面的代码以获取更多信息:
字符串
First grant foreground location permissions
Then request for
ACCESS_BACKGROOUND_LOCATION
.的