Unity项目Android端BLE连接免权限弹窗及设备过滤方案咨询
Android Unity项目BLE连接免权限/过滤配对界面解决方案
1. 无位置权限、不弹伴侣配对界面的实现可行性
- Android 12(API等级31)及以上版本,系统已经将BLE扫描和位置权限解绑,无需申请任何位置权限即可完成BLE设备搜索、连接
- 你当前弹出伴侣设备配对界面,根本原因是Manifest中声明了
android.software.companion_device_setup特性,且项目使用了伴侣设备配对API,不使用该API即可完全避免弹出该系统级配对界面
2. 正确Manifest配置(适配全Android版本)
替换你当前的Manifest权限配置为以下内容,可避免位置权限申请、避免伴侣配对界面弹出:
<!-- 通用BLE基础权限 --> <uses-permission android:name="android.permission.BLUETOOTH" android:maxSdkVersion="30" /> <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" android:maxSdkVersion="30" /> <!-- Android 12+ 专属BLE权限,无需位置权限 --> <uses-permission android:name="android.permission.BLUETOOTH_SCAN" android:usesPermissionFlags="neverForLocation" /> <uses-permission android:name="android.permission.BLUETOOTH_CONNECT" /> <!-- 声明支持BLE --> <uses-feature android:name="android.hardware.bluetooth_le" android:required="true" /> <!-- 以下原有配置直接删除,即可关闭伴侣配对界面逻辑 <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> <uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION"/> <uses-permission-sdk-23 android:name="android.permission.ACCESS_COARSE_LOCATION"/> <uses-permission android:name="android.permission.REQUEST_COMPANION_RUN_IN_BACKGROUND"/> <uses-permission android:name="android.permission.REQUEST_COMPANION_USE_DATA_IN_BACKGROUND"/> <uses-feature android:name="android.software.companion_device_setup"/> -->
3. 删配置后崩溃的修复方案
你之前删除配置后崩溃是因为项目中使用的BLE插件/原生逻辑仍在请求已删除的权限、调用伴侣设备相关API,需要同步修改逻辑:
- 把插件中原有的位置权限申请代码全部删除,替换为Android 12+的BLE权限申请逻辑
- 删除所有调用伴侣设备配对API的代码,改用原生BLE扫描API做设备搜索
4. 若必须使用伴侣设备配对功能的过滤方案
如果业务场景必须使用伴侣设备配对API,可通过以下逻辑实现设备过滤,仅展示目标BLE设备:
- 新建Android桥接插件,或直接在Unity中用
AndroidJavaClass调用系统CompanionDeviceManagerAPI - 构建
BluetoothLeDeviceFilter实例,按你的目标设备的服务UUID、设备名前缀/正则、MAC地址等参数设置过滤规则 - 把过滤规则绑定到配对请求中,系统就只会展示符合条件的BLE设备,不会显示WiFi和其他无关蓝牙设备
内容的提问来源于stack exchange,提问作者Nic
相关产品推荐
相关产品推荐

