Android 12 拒绝BLUETOOTH_CONNECT权限后仍被授予权限

8

我知道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
                )
            }
        }
    }

在初始启动时,这似乎运行良好,它将提示附近设备权限,因为它查看了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

当我调试代码时,只有BLUETOOTH_CONNECT的值为真(true),其他的都是假(false)。您有什么想法,为什么会这样,怎么解决呢?可能是个bug吗?谢谢。


2
谢谢分享!我遇到了完全相同的问题。今天我也遇到了同样的问题。你找到为什么它返回Granted了吗? - luckysing_noobster
@luckysing_noobster 很高兴知道还有其他人也遇到了这个问题。我还没有找到解决方法,我认为这可能是一个bug或者Google尚未正确实现附近设备作为权限组,因为它存在于权限组中。 我可以确认当它返回true但在应用信息的权限中被拒绝时,蓝牙连接不起作用并返回错误。所以我真的不知道发生了什么。 - Ayohaych
1
只是确认一下,这是真的,我也看到了这个问题。 - Keith Loughnane
1
我将目标更新为31,看起来已经生效了。 - Keith Loughnane
1
我不想在完成工作之前回复,这样我就可以百分之百确定,但至少对于蓝牙权限,它是有效的。 - Keith Loughnane
显示剩余2条评论
1个回答

2

我遇到了相同的问题:

minSdkVersion 21
targetSdkVersion 30
compileSdkVersion 31

将目标版本更改为31对我来说解决了问题。

minSdkVersion 21
targetSdkVersion 31
compileSdkVersion 31

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接