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); }