Flutter中获取蓝牙权限时出现Need android.permission.BLUETOOTH_CONNECT权限错误
解决Flutter中蓝牙权限缺失BLUETOOTH_CONNECT的问题
你碰到的Need android.permission.BLUETOOTH_CONNECT错误,核心原因是Android 12(API 31)及以上版本对蓝牙权限体系做了拆分——旧版的BLUETOOTH和BLUETOOTH_ADMIN权限已被细分,BLUETOOTH_CONNECT正是连接蓝牙设备必须的新权限。
第一步:更新AndroidManifest.xml配置
直接补充缺失的权限,并针对不同Android版本做适配(低版本不需要新权限),修改后的配置如下:
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.flutterbluetooth"> <!-- Android 12+ 蓝牙核心权限 --> <uses-permission android:name="android.permission.BLUETOOTH_CONNECT" android:minSdkVersion="31"/> <uses-permission android:name="android.permission.BLUETOOTH_SCAN" android:minSdkVersion="31"/> <!-- Android 11及以下 旧版蓝牙权限 --> <uses-permission android:name="android.permission.BLUETOOTH" android:maxSdkVersion="30"/> <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" android:maxSdkVersion="30"/> <!-- 低版本蓝牙扫描所需位置权限 --> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" android:maxSdkVersion="30"/> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" android:maxSdkVersion="30"/> <application android:label="flutterbluetooth" android:name="${applicationName}" android:icon="@mipmap/ic_launcher"> <activity ... </activity> <meta-data android:name="flutterEmbedding" android:value="2" /> </application> </manifest>
第二步:Flutter代码中动态申请权限
蓝牙相关权限属于危险权限,必须在代码中主动请求用户授权,推荐使用permission_handler包实现:
- 先在
pubspec.yaml添加依赖:
dependencies: permission_handler: ^10.2.0
- 在业务代码中发起权限请求:
import 'package:permission_handler/permission_handler.dart'; Future<void> requestBluetoothPermissions() async { // 针对Android版本适配请求逻辑 if (await Permission.bluetoothConnect.request().isGranted && await Permission.bluetoothScan.request().isGranted) { // 权限获取成功,执行蓝牙连接等操作 } else { // 权限被拒绝,提示用户前往设置开启 } }
内容的提问来源于stack exchange,提问作者ckot
相关产品推荐
相关产品推荐

