Android11:permission.ACCESS_BACKGROUND_LOCATION 阻止询问权限

时间:2021-04-29 16:22:02

标签: android permissions location

我的应用程序(标记 API30)需要在后台收集精确位置。 它实际上需要:

WRITE_EXTERNAL_STORAGE
RECORD_AUDIO
ACCESS_FINE_LOCATION
ACCESS_BACKGROUND_LOCATION (API >= 29)

所以我设置了以下方法:

public void checkMMPerms() {
    if (Build.VERSION.SDK_INT >= 23) {
        int extraperm = 0;
        String[] perms = new String[(Build.VERSION.SDK_INT >= 29) ? 4 : 3];
        perms[0] = Manifest.permission.WRITE_EXTERNAL_STORAGE;
        perms[1] = Manifest.permission.RECORD_AUDIO;
        perms[2] = Manifest.permission.ACCESS_FINE_LOCATION;
        if (Build.VERSION.SDK_INT >= 29) {
            perms[3] = Manifest.permission.ACCESS_BACKGROUND_LOCATION;
            extraperm = checkSelfPermission(perms[3]);
        }

        if (checkSelfPermission(perms[0]) + checkSelfPermission(perms[1])
            + checkSelfPermission(perms[2]) + extraperm != PackageManager.PERMISSION_GRANTED)
                 requestPermissions(perms, 0);
        else {
            RECPerms = true;
            GPSPerms = true;
        }
    }
}

这个方法的问题在于,即使用户没有拒绝权限,requestPermissions 也会返回 Deny。

如果我删除 perms[3] 行,也就是说,不要求 ACCESS_BACKGROUND_LOCATION 它工作正常:它要求 3 个权限,但位置设置为“仅在使用应用程序时允许”,正如预期的那样。

如果我添加了 ACCESS_BACKGROUND_LOCATION perm,为什么不询问任何权限?

编辑:如果我在 Android 11 中不要求 Manifest.permission.ACCESS_FINE_LOCATION,问题仍然存在。所以这也不起作用:

public void checkMMPerms() {
    if (Build.VERSION.SDK_INT >= 23) {
        String[] perms = new String[3];
        perms[0] = Manifest.permission.WRITE_EXTERNAL_STORAGE;
        perms[1] = Manifest.permission.RECORD_AUDIO;
        perms[2] = Manifest.permission.ACCESS_FINE_LOCATION;
        if (Build.VERSION.SDK_INT >= 29) {
            perms[2] = Manifest.permission.ACCESS_BACKGROUND_LOCATION;
        }

        if (checkSelfPermission(perms[0]) + checkSelfPermission(perms[1])
            + checkSelfPermission(perms[2]) != PackageManager.PERMISSION_GRANTED)
                 requestPermissions(perms, 0);
        else {
            RECPerms = true;
            GPSPerms = true;
        }
    }
}

0 个答案:

没有答案