Flutter蓝牙应用在POCO M2 Pro无法扫描设备及libmigui.so缺失求助
解决POCO M2 Pro上Flutter蓝牙应用扫描失败问题
一、补全Android权限配置
你当前的权限仅适配旧版Android系统,POCO M2 Pro搭载Android 10/11,需补充高版本蓝牙权限:
在AndroidManifest.xml中添加以下配置:
<!-- Android 10+ 蓝牙扫描/连接核心权限 --> <uses-permission android:name="android.permission.BLUETOOTH_SCAN" android:usesPermissionFlags="neverForLocation" /> <uses-permission android:name="android.permission.BLUETOOTH_CONNECT" /> <!-- Android 12+ 可选广播权限(若需对外广播蓝牙信号) --> <uses-permission android:name="android.permission.BLUETOOTH_ADVERTISE" /> <!-- 声明应用依赖蓝牙BLE特性 --> <uses-feature android:name="android.hardware.bluetooth_le" android:required="true" />
注:如果你的应用需要通过蓝牙扫描获取位置信息,需移除android:usesPermissionFlags="neverForLocation",同时确保申请位置权限。
二、强制申请运行时权限
仅在Manifest配置权限无效,必须在代码中主动申请蓝牙及相关权限:
import 'package:permission_handler/permission_handler.dart'; // 扫描前调用该方法申请权限 Future<void> requestBluetoothPermissions() async { // 申请蓝牙扫描权限 var scanStatus = await Permission.bluetoothScan.request(); if (!scanStatus.isGranted) { // 提示用户前往设置授权 } // 申请蓝牙连接权限 var connectStatus = await Permission.bluetoothConnect.request(); if (!connectStatus.isGranted) { // 提示用户前往设置授权 } // 若需位置辅助扫描,申请位置权限 var locationStatus = await Permission.locationWhenInUse.request(); if (!locationStatus.isGranted) { // 提示用户前往设置授权 } }
三、修复libmigui.so缺失错误
该错误是MIUI系统特有问题,可通过以下两种方式解决:
- 关闭MIUI优化:打开POCO M2 Pro的「设置」→「更多设置」→「开发者选项」,找到「MIUI优化」并关闭,重启设备后重新安装应用。
- 更换蓝牙插件:若使用旧版
flutter_blue,建议切换到维护分支flutter_blue_plus,它修复了大量MIUI适配问题。更新pubspec.yaml:
dependencies: flutter_blue_plus: ^1.13.18 # 替换为最新版本
执行flutter pub get后,替换代码中flutter_blue的相关调用。
四、额外排查项
- 确认POCO M2 Pro蓝牙已开启,待连接外设处于可发现模式。
- 检查应用是否被授予「后台弹出界面」权限,MIUI部分机型限制后台操作会影响蓝牙扫描。
- 优先测试release包,debug包在MIUI上可能存在额外限制。
内容的提问来源于stack exchange,提问作者Bharath Kumar
相关产品推荐
相关产品推荐

