Android 13 上 Flutter 蓝牙权限问题:无法扫描设备

问题描述 投票:0回答:2

我正在开发一个利用蓝牙功能的 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 上成功扫描蓝牙设备?

感谢您的协助!

android flutter bluetooth
2个回答
1
投票

正如官方指南中所述,您必须包含

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"/>

0
投票

在我的情况下没有解决。即使添加使用蓝牙连接权限后仍然显示需要SCAN权限

© www.soinside.com 2019 - 2024. All rights reserved.