使用Flutter Blue Plus扫描设备时出现Missing Adapter错误求助
解决Flutter Blue Plus在Android 12上出现Missing Adapter错误的方案
1. 补全Android 12专属蓝牙权限配置
Android 12对蓝牙权限做了拆分,新增BLUETOOTH_SCAN、BLUETOOTH_CONNECT等权限,替代旧版本依赖位置权限的逻辑。确保AndroidManifest.xml包含完整权限配置:
<!-- 适配Android 11及以下的蓝牙基础权限 --> <uses-permission android:name="android.permission.BLUETOOTH" android:maxSdkVersion="30" /> <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" android:maxSdkVersion="30" /> <!-- Android 12+ 蓝牙扫描、连接权限 --> <uses-permission android:name="android.permission.BLUETOOTH_SCAN" /> <uses-permission android:name="android.permission.BLUETOOTH_CONNECT" /> <!-- 若需扫描未广播名称的BLE设备,仍需位置权限 --> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-feature android:name="android.hardware.bluetooth_le" android:required="true" />
2. 主动动态申请权限
Flutter Blue Plus不会自动处理权限申请,必须在代码中主动请求所需权限,可借助permission_handler库实现:
import 'package:permission_handler/permission_handler.dart'; import 'package:flutter_blue_plus/flutter_blue_plus.dart'; Future<void> prepareForScan() async { // 请求蓝牙扫描、连接权限 final scanPerm = await Permission.bluetoothScan.request(); final connectPerm = await Permission.bluetoothConnect.request(); // 若需要位置权限则一并请求 final locationPerm = await Permission.locationWhenInUse.request(); if (scanPerm.isGranted && connectPerm.isGranted) { await startBluetoothScan(); } else { // 权限被拒,可弹窗引导用户前往设置页开启 } } Future<void> startBluetoothScan() async { // 先确认蓝牙状态 final state = await FlutterBluePlus.instance.state.first; if (state == BluetoothState.on) { FlutterBluePlus.startScan(timeout: const Duration(seconds: 5)); } else { // 请求用户开启蓝牙 FlutterBluePlus.instance.requestEnable(); } }
3. 排查迁移残留问题
如果你是从flutter_blue迁移到Flutter Blue Plus,需做以下清理:
- 移除
pubspec.yaml中旧的flutter_blue依赖 - 执行
flutter clean清除旧构建缓存,再运行flutter pub get重新拉取依赖 - 检查Android项目中是否残留
flutter_blue相关的原生配置或权限
4. 验证蓝牙适配器状态
在扫描前务必确认蓝牙适配器处于开启状态:
// 监听蓝牙状态变化 FlutterBluePlus.instance.state.listen((state) { if (state == BluetoothState.off) { // 蓝牙关闭时提示用户开启 FlutterBluePlus.instance.requestEnable(); } });
内容的提问来源于stack exchange,提问作者Kęstutis Ramulionis
相关产品推荐
相关产品推荐

