Android 12 BLUETOOTH_CONNECT 权限被拒绝时授予

And*_*art 8 permissions android bluetooth kotlin android-12

所以我知道Android 12有新的蓝牙权限。在“应用程序信息权限”中,它现在看起来像“附近的设备”。我有这样的逻辑:

        if (ContextCompat.checkSelfPermission(this, Manifest.permission.BLUETOOTH_CONNECT) == PackageManager.PERMISSION_GRANTED) {
            viewModel.connectDevice(macAddressDropdown.selectedItem.toString())
        } else {
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
                ActivityCompat.requestPermissions(
                    this,
                    arrayOf(Manifest.permission.BLUETOOTH_CONNECT),
                    1
                )
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

在初次启动时,这似乎工作正常,它会提示附近设备权限,正如 Google 文档中所示。之后,我进入“应用程序信息”中的“权限”,并拒绝“附近的设备”权限。当我调试这个逻辑时,它说仍然允许BLUETOOTH_CONNECT。

s = ContextCompat.checkSelfPermission(this, Manifest.permission.BLUETOOTH_CONNECT) == PackageManager.PERMISSION_GRANTED
a = ContextCompat.checkSelfPermission(this, Manifest.permission.BLUETOOTH_SCAN) == PackageManager.PERMISSION_GRANTED
b = ContextCompat.checkSelfPermission(this, Manifest.permission.BLUETOOTH) == PackageManager.PERMISSION_GRANTED
c = ContextCompat.checkSelfPermission(this, Manifest.permission.BLUETOOTH_ADMIN) == PackageManager.PERMISSION_GRANTED
d = ContextCompat.checkSelfPermission(this, Manifest.permission_group.NEARBY_DEVICES) == PackageManager.PERMISSION_GRANTED
Run Code Online (Sandbox Code Playgroud)

当我调试这个时,BLUETOOTH_CONNECT 是唯一显示为 true 的,其余的都是 false。关于为什么会发生这种情况以及如何解决它有什么想法吗?可能是一个错误?谢谢

Kei*_*ane 2

我遇到了同样的问题

minSdkVersion 21
targetSdkVersion 30
compileSdkVersion 31
Run Code Online (Sandbox Code Playgroud)

将目标版本更改为 31 帮我修复它

minSdkVersion 21
targetSdkVersion 31
compileSdkVersion 31
Run Code Online (Sandbox Code Playgroud)