From 386f2046af0cc4375d1fb9806e54668d8e2e6eea Mon Sep 17 00:00:00 2001 From: liwei1dao Date: Tue, 17 Jun 2025 19:30:36 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B8=8A=E4=BC=A0=E6=9D=83=E9=99=90=E6=A3=80?= =?UTF-8?q?=E6=B5=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../controllers/pairing_controller.dart | 47 ++++++++++++++++++- 1 file changed, 46 insertions(+), 1 deletion(-) diff --git a/lib/modules/pairing/controllers/pairing_controller.dart b/lib/modules/pairing/controllers/pairing_controller.dart index e8fd9945e..69fe1dfd3 100644 --- a/lib/modules/pairing/controllers/pairing_controller.dart +++ b/lib/modules/pairing/controllers/pairing_controller.dart @@ -137,7 +137,7 @@ class PairingController extends GetxController { void skipPairing() async { Logger.i(_tag, '用户选择跳过配对'); // 权限申请 - await _checkAndRequestPermissions(); + await _checkAndRequestAgentPermissions(); // 启动BLE后台服务 await BleManager.to.startAgentService(); Logger.i(_tag, 'BLE后台服务已启动'); @@ -502,6 +502,8 @@ class PairingController extends GetxController { statusDescription.value = '配对成功!'; try { + //检测agent权限是否已授予 + _checkAndRequestAgentPermissions(); // 启动BLE后台服务 await BleManager.to.startAgentService(); Logger.i(_tag, 'BLE后台服务已启动'); @@ -577,6 +579,49 @@ class PairingController extends GetxController { if (Platform.isAndroid && await _getAndroidSdkVersion() >= 31) { requiredPermissions.add(Permission.bluetoothScan); requiredPermissions.add(Permission.bluetoothConnect); + } + + // 逐个请求权限 + for (var permission in requiredPermissions) { + final permissionName = _getPermissionName(permission); + Logger.d(_tag, '正在请求 $permissionName 权限'); + + final granted = await PermissionUtil.instance.requestPermission( + permissionType: permission, + permissionName: permissionName, + explanationText: _getExplanationText(permission), + permanentDenialText: '您已永久拒绝$permissionName权限,请前往应用设置开启', + settingsButtonText: '去设置', + cancelButtonText: '取消', + ); + + if (!granted) { + Logger.w(_tag, '$permissionName 权限未授予'); + return false; + } + } + + return true; + } catch (e) { + Logger.e(_tag, '权限检查失败: $e'); + return false; + } + } + + Future _checkAndRequestAgentPermissions() async { + try { + if (Platform.isIOS) { + // iOS权限由系统自动处理 + return true; + } + + // Android权限检查 - 使用 PermissionUtil + // 根据 Android 版本确定需要的权限 + List requiredPermissions = [ + Permission.locationWhenInUse, + ]; + + if (Platform.isAndroid && await _getAndroidSdkVersion() >= 31) { requiredPermissions.add(Permission.locationAlways); requiredPermissions.add(Permission.notification); }