Flutter中如何配置flutter_blue_plus的权限

我在Flutter项目中使用flutter_blue_plus插件进行蓝牙开发,但在Android和iOS平台上遇到了权限配置问题。请问具体需要配置哪些权限?Android的AndroidManifest.xml需要添加哪些权限声明?iOS的Info.plist又需要设置哪些键值?不同平台的权限配置有什么区别?如何处理动态权限申请?希望有详细的配置示例和最佳实践说明。

2 回复

android/app/src/main/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" />

Android 10+ 还需要:

<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />

iOS 需在 Info.plist 中添加:

<key>NSBluetoothAlwaysUsageDescription</key>
<string>需要蓝牙权限</string>

更多关于Flutter中如何配置flutter_blue_plus的权限的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


在 Flutter 中使用 flutter_blue_plus 库时,需要在 Android 和 iOS 平台上分别配置蓝牙权限。以下是详细步骤:

Android 配置

  1. 编辑 android/app/src/main/AndroidManifest.xml 文件: 在 <manifest> 标签内添加以下权限:

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

    对于 Android 12(API 级别 31)或更高版本,还需添加:

    <uses-permission android:name="android.permission.BLUETOOTH_SCAN" />
    <uses-permission android:name="android.permission.BLUETOOTH_CONNECT" />
    <uses-permission android:name="android.permission.BLUETOOTH_ADVERTISE" />
    
  2. 处理 Android 12 新权限: 在 <application> 标签中添加:

    <uses-feature android:name="android.hardware.bluetooth_le" android:required="true"/>
    

iOS 配置

  1. 编辑 ios/Runner/Info.plist 文件: 添加以下键值对以描述蓝牙使用目的:

    <key>NSBluetoothAlwaysUsageDescription</key>
    <string>应用需要蓝牙权限来连接和扫描设备</string>
    <key>NSBluetoothPeripheralUsageDescription</key>
    <string>应用需要蓝牙权限来连接和扫描设备</string>
    
  2. 启用后台模式(如需要): 在 Info.plist 中添加:

    <key>UIBackgroundModes</key>
    <array>
      <string>bluetooth-central</string>
    </array>
    

代码中请求权限(Android 和 iOS)

在 Flutter 代码中,使用 permission_handler 库动态请求权限:

import 'package:permission_handler/permission_handler.dart';

// 请求蓝牙和位置权限
Future<void> requestPermissions() async {
  Map<Permission, PermissionStatus> statuses = await [
    Permission.bluetooth,
    Permission.location,
    Permission.bluetoothConnect, // Android 12+
    Permission.bluetoothScan,    // Android 12+
  ].request();
  
  if (statuses[Permission.location]?.isGranted ?? false) {
    // 权限已授予
  }
}

注意事项

  • Android 10+:需要位置权限才能扫描蓝牙设备。
  • 测试:在真机上测试权限流程,确保用户授权后功能正常。
  • 如果仅支持特定 Android 版本,可使用 android:maxSdkVersion 限制权限。

完成配置后,重新构建应用即可使用 flutter_blue_plus 功能。

回到顶部