React Native 0.66 Android11 蓝牙权限不在应用设置显示如何解决
问题原因
BLUETOOTH、BLUETOOTH_ADMIN属于Android系统定义的普通权限,只要在AndroidManifest.xml中完成声明,应用安装时会自动获取授权,不需要动态申请,也不会在系统应用权限管理页面展示,属于正常逻辑。- React Native 0.66版本的
PermissionsAndroid.PERMISSIONS枚举没有收录BLUETOOTH、BLUETOOTH_ADMIN这两个值,你传入不存在的枚举值调用申请接口,自然会抛出permission is null错误。
解决方案
基础蓝牙功能使用场景
直接删除动态申请BLUETOOTH、BLUETOOTH_ADMIN权限的代码即可,只要Manifest中已经声明,就可以直接调用蓝牙相关基础能力。
蓝牙扫描/连接/广播场景适配
- 你的测试设备是Android 11(API 30),使用蓝牙扫描能力只需要保证已经拿到定位权限,且设备定位开关处于开启状态即可正常使用。
- 如果后续需要适配Android 12及以上系统版本,需要做如下修改:
- 放开
AndroidManifest.xml中被注释的三个蓝牙权限声明:
<uses-permission android:name="android.permission.BLUETOOTH_ADVERTISE" /> <uses-permission android:name="android.permission.BLUETOOTH_CONNECT" /> <uses-permission android:name="android.permission.BLUETOOTH_SCAN" android:usesPermissionFlags="neverForLocation" />- 动态申请时,改为申请以上三个新增的蓝牙权限即可,这三个权限属于危险权限,
PermissionsAndroid.PERMISSIONS枚举中有对应值,可以正常申请。
- 放开
内容的提问来源于stack exchange,提问作者Miguel
相关产品推荐
相关产品推荐

