diff --git a/star_lock/lib/blue/blue_manage.dart b/star_lock/lib/blue/blue_manage.dart index f77c35a4..639ff321 100644 --- a/star_lock/lib/blue/blue_manage.dart +++ b/star_lock/lib/blue/blue_manage.dart @@ -697,7 +697,7 @@ class BlueManage { connectDeviceMacAddress = ""; if (bluetoothConnectionState == BluetoothConnectionState.connected) { //加快蓝牙断连 - await bluetoothConnectDevice!.disconnect(timeout: 1); + await bluetoothConnectDevice!.disconnect(timeout: 2); AppLog.log("断开连接成功"); } // } diff --git a/star_lock/lib/main/lockDetail/lockSet/lockEscalation/lockEscalation_logic.dart b/star_lock/lib/main/lockDetail/lockSet/lockEscalation/lockEscalation_logic.dart index dbe2e746..62f4c274 100644 --- a/star_lock/lib/main/lockDetail/lockSet/lockEscalation/lockEscalation_logic.dart +++ b/star_lock/lib/main/lockDetail/lockSet/lockEscalation/lockEscalation_logic.dart @@ -48,8 +48,7 @@ class LockEscalationLogic extends BaseGetXController { //手动升级 Future otaUpdate() async { - var status = await PermissionDialog.request( - Permission.storage, '需要访问读写权限才能使用手动升级固件'.tr); + var status = await PermissionDialog.requestStorage(); if (status != true) { return; } @@ -69,8 +68,7 @@ class LockEscalationLogic extends BaseGetXController { } String md5Str = md5.convert(otaBin!).toString(); headJson!['fwMd5'] = md5Str; - ShowTipView().showIosTipWithContentDialog("未避免异常情况,请在门打开时升级".tr, - () async { + ShowTipView().showIosTipWithContentDialog("未避免异常情况,请在门打开时升级".tr, () async { blueOTAUpgrade(headJson!, [0, 0, 0, 0]); EasyLoading.show( status: '设备连接中...'.tr, maskType: EasyLoadingMaskType.black); diff --git a/star_lock/lib/mine/addLock/nearbyLock/nearbyLock_logic.dart b/star_lock/lib/mine/addLock/nearbyLock/nearbyLock_logic.dart index b6e1132d..2f5533fa 100644 --- a/star_lock/lib/mine/addLock/nearbyLock/nearbyLock_logic.dart +++ b/star_lock/lib/mine/addLock/nearbyLock/nearbyLock_logic.dart @@ -431,8 +431,7 @@ class NearbyLockLogic extends BaseGetXController { //手动升级 Future otaUpdate() async { - var status = await PermissionDialog.request( - Permission.storage, '需要访问读写权限才能使用手动升级固件'.tr); + var status = await PermissionDialog.requestStorage(); if (status != true) { return; } diff --git a/star_lock/lib/widget/permission/permission_dialog.dart b/star_lock/lib/widget/permission/permission_dialog.dart index acaf315b..b2f413c0 100644 --- a/star_lock/lib/widget/permission/permission_dialog.dart +++ b/star_lock/lib/widget/permission/permission_dialog.dart @@ -190,6 +190,98 @@ class PermissionDialog { return false; } + //读写 + static Future requestStorage() async { + if (Get.context == null) { + return false; + } + bool isAndroid33 = + AppPlatform.isAndroid && AppPlatform.getSdkIntValue() >= 33; + + //通用的局部函数 + List requestPermission() { + List permissions; + if (isAndroid33) { + permissions = [ + Permission.mediaLibrary, + Permission.photos, + // Permission.audio, + Permission.videos, + Permission.manageExternalStorage, + ]; + } else { + permissions = [ + Permission.storage, + ]; + } + return permissions; + } + + Future permissionStatus(List permissions) async { + bool isGranted = true; + for (Permission permission in permissions) { + isGranted = + isGranted && (await permission.status) == PermissionStatus.granted; + } + if (isAndroid33) { + // android 33以上需要申请媒体库权限 + isGranted = (await Permission.mediaLibrary.status) == + PermissionStatus.granted || + (await Permission.manageExternalStorage.status) == + PermissionStatus.granted; + } + return isGranted; + } + + bool application = true; + Permission permission = Permission.photos; + List permissions = requestPermission(); + dynamic cache = await Storage.getString(titles[permission]); + bool isGranted = await permissionStatus(permissions); + if (AppPlatform.isAndroid && !isGranted && cache is! String) { + application = await showCupertinoDialog( + context: Get.context!, + builder: (context) { + return PopScope( + canPop: false, + child: CupertinoAlertDialog( + title: Text('${'申请'.tr}${titles[permission] ?? ''}${'权限'.tr}'), + content: Text('需要访问读写权限才能使用手动升级固件'.tr), + actions: [ + CupertinoDialogAction( + child: Text('不允许'.tr), + onPressed: () { + Get.back(result: false); + }, + ), + CupertinoDialogAction( + child: Text('允许'.tr), + onPressed: () { + Get.back(result: true); + }, + ), + ], + )); + }, + ); + if (application) { + await Storage.setString(titles[permission], titles[permission]); + } + } else if (cache is String) { + bool isDenied = !(await permissionStatus(permissions)); + if (isDenied) { + showSet(permission); + return false; + } + } + if (application) { + Map statuses = await permissions.request(); + bool isGranted = await permissionStatus(statuses.keys.toList()); + return isGranted; + } + return false; + } + //显示权限判断申请框 static Future request(Permission permission, [String? content]) async { if (Get.context == null) {