我正在开发一个利用蓝牙功能的 Flutter 应用程序,特别是使用 flutter_blue 包进行蓝牙扫描。我在 Android 13 上遇到了与蓝牙权限相关的问题。
问题描述:
在我的
AndroidManifest.xml
文件中,我包含了以下权限:
<uses-permission android:name="android.permission.BLUETOOTH"/>
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>
在我的 Flutter 代码中,我使用
permission_handler
包来请求蓝牙扫描和位置权限。这是我的代码片段:
@override
void initState() {
super.initState();
requestBluetoothPermission();
}
void requestBluetoothPermission() async {
PermissionStatus bluetoothStatus = await Permission.bluetoothScan.request();
PermissionStatus locationStatus = await Permission.location.request();
if (bluetoothStatus.isGranted && locationStatus.isGranted) {
scanDevices();
} else { }
}
void scanDevices() {
try {
flutterBlue.startScan();
flutterBlue.scanResults.listen((results) {
setState(() {
_scannedDevices = results;
print("Bluetooth scan results: ${results.toString()}");
});
});
} catch(e) {
print("Error during Bluetooth scanning: $e");
}
}
问题:尽管请求了必要的权限,但我仍然遇到以下错误:
[ERROR:flutter/runtime/dart_vm_initializer.cc(41)] Unhandled
Exception:PlatformException(startScan, Need android.permission.BLUETOOTH_SCAN
permission for AttributionSource { uid = XXXX, packageName = XXXX, attributionTag
= null, token = android.os.BinderProxy@XXXX, next = null }: GattService
registerScanner, java.lang.SecurityException: Need android.permission.BLUETOOTH_SCAN
permission for AttributionSource { uid = XXXX, packageName = XXXX, attributionTag =
null, token = android.os.BinderProxy@XXXX, next = null }: GattService registerScanner
Additional Information:
颤振版本:3.13.2 flutter_blue 软件包版本:0.8.0 Permission_handler 包版本:11.0.0 安卓版本:13
我已经检查了
AndroidManifest.xml
文件中的权限,并确保我在 Flutter 代码中正确请求它们。可能是什么原因导致此问题?如何解决该问题以在 Android 13 上成功扫描蓝牙设备?
感谢您的协助!
正如官方指南中所述,您必须包含
BLUETOOTH_SCAN
权限才能扫描蓝牙设备。
如果您的应用程序寻找蓝牙设备,例如 BLE 外围设备,请声明
权限。BLUETOOTH_SCAN
所以在你的清单中它应该看起来像这样:
<uses-permission android:name="android.permission.BLUETOOTH"/>
<uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.BLUETOOTH_SCAN"/>
在我的情况下没有解决。即使添加使用蓝牙连接权限后仍然显示需要SCAN权限