You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 07:35:09