Android上使用蓝牙的官方文档 https://developer.android.google.cn/guide/topics/connectivity/bluetooth?hl=zh_cn
在Android12上蓝牙的权限更新了,在动态申请时变成了 “附近的设备”相关的权限。
测试工程师发现了一个问题:在手机授予相关的蓝牙权限后,在设置中对已经授予的权限进行取消后,Android应用在代码中通过
PackageManager.PERMISSION_GRANTED == ActivityCompat.checkSelfPermission(this, Manifest.permission.BLUETOOTH_CONNECT);
PackageManager.PERMISSION_GRANTED == ActivityCompat.checkSelfPermission(this, Manifest.permission.BLUETOOTH_SCAN);
都无法获取真正的蓝牙权限状态,除非卸载后重装首次判断,否则就是或者不到正确的状态,导致在使用蓝牙时因缺乏蓝牙相关的权限导致崩溃。
这确实很不符合以往对危险权限的理解。制作一个demo,使用的都是默认的配置的,包括
targetSdkVersion 与 compileSdkVersion
经过验证发现在demo上就很正常,而在项目中就是不行。
后来经过仔细排查,发现
demo上的配置如下
targetSdkVersion 31
compileSdkVersion 31
而在项目中
targetSdkVersion 28
compileSdkVersion 31
意味着既有的项目没有适配Android12,修改为31之后解决了;同时又引如了新的问题,如Toast在部分手机上会带应用的logo,通过自定义Toast来解决
网友评论