From b4ab7f4039eedada52cfd33663ecb87e04f04c14 Mon Sep 17 00:00:00 2001 From: Zeew Date: Wed, 13 Aug 2025 23:28:53 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=96=B0=E5=A2=9E=E5=AE=89=E5=8D=93?= =?UTF-8?q?=E7=AB=AF=E5=85=81=E8=AE=B8=E8=AE=BF=E9=97=AE=E6=89=80=E6=9C=89?= =?UTF-8?q?=E6=96=87=E4=BB=B6=E7=9A=84=E6=9D=83=E9=99=90=E7=94=B3=E8=AF=B7?= =?UTF-8?q?=E6=B5=81=E7=A8=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/ui/utils/permission.dart | 5 ++++ .../tim_uikit_chat_image_elem.dart | 18 +++++++++--- .../tim_uikit_more_panel.dart | 28 +++++++++++++------ lib/ui/widgets/video_screen.dart | 17 ++++++++--- 4 files changed, 51 insertions(+), 17 deletions(-) diff --git a/lib/ui/utils/permission.dart b/lib/ui/utils/permission.dart index 6ca7d3f..25f9517 100644 --- a/lib/ui/utils/permission.dart +++ b/lib/ui/utils/permission.dart @@ -77,6 +77,11 @@ class _PermissionRequestInfo extends TIMUIKitState "icon": "images/chat_permission_icon_file.png", "text": TIM_t("为方便您查看和选择相册里的图片视频发送给朋友,以及保存内容到设备,请允许我们访问您设备上的照片、媒体内容。") }, + 22: { + "name": TIM_t("管理所有文件"), + "icon": "images/chat_permission_icon_file.png", + "text": TIM_t("为方便您访问设备上的所有照片、视频和文件,以便发送给朋友和保存内容到设备,请允许我们管理所有文件的权限。这样您就可以选择设备上的任意资源了。") + }, 32: { "name": TIM_t("相册"), "icon": "images/chat_permission_icon_file.png", diff --git a/lib/ui/views/TIMUIKitChat/TIMUIKitMessageItem/tim_uikit_chat_image_elem.dart b/lib/ui/views/TIMUIKitChat/TIMUIKitMessageItem/tim_uikit_chat_image_elem.dart index 9daa055..9e7383d 100644 --- a/lib/ui/views/TIMUIKitChat/TIMUIKitMessageItem/tim_uikit_chat_image_elem.dart +++ b/lib/ui/views/TIMUIKitChat/TIMUIKitMessageItem/tim_uikit_chat_image_elem.dart @@ -148,13 +148,23 @@ class _TIMUIKitImageElem extends TIMUIKitState { AndroidDeviceInfo androidInfo = await deviceInfo.androidInfo; if (PlatformUtils().isMobile) { if ((androidInfo.version.sdkInt) >= 33) { - final photos = await Permissions.checkPermission( + // Android 13+: 优先检查管理外部存储权限以访问所有资源 + final manageExternalStorage = await Permissions.checkPermission( context, - Permission.photos.value, + Permission.manageExternalStorage.value, theme, ); - if (!photos) { - return; + + if (!manageExternalStorage) { + // 如果没有管理外部存储权限,则检查照片权限 + final photos = await Permissions.checkPermission( + context, + Permission.photos.value, + theme, + ); + if (!photos) { + return; + } } } else { final storage = await Permissions.checkPermission( diff --git a/lib/ui/views/TIMUIKitChat/TIMUIKitTextField/tim_uikit_more_panel.dart b/lib/ui/views/TIMUIKitChat/TIMUIKitTextField/tim_uikit_more_panel.dart index 229e35b..ae08918 100644 --- a/lib/ui/views/TIMUIKitChat/TIMUIKitTextField/tim_uikit_more_panel.dart +++ b/lib/ui/views/TIMUIKitChat/TIMUIKitTextField/tim_uikit_more_panel.dart @@ -361,18 +361,28 @@ class _MorePanelState extends TIMUIKitState { if (PlatformUtils().isAndroid) { AndroidDeviceInfo androidInfo = await deviceInfo.androidInfo; if ((androidInfo.version.sdkInt) >= 33) { - final videos = await Permissions.checkPermission( + // Android 13+: 优先检查管理外部存储权限以访问所有资源 + final manageExternalStorage = await Permissions.checkPermission( context, - Permission.videos.value, + Permission.manageExternalStorage.value, theme, ); - final photos = await Permissions.checkPermission( - context, - Permission.photos.value, - theme, - ); - if (!videos && !photos) { - return; + + if (!manageExternalStorage) { + // 如果没有管理外部存储权限,则检查媒体权限 + final videos = await Permissions.checkPermission( + context, + Permission.videos.value, + theme, + ); + final photos = await Permissions.checkPermission( + context, + Permission.photos.value, + theme, + ); + if (!videos && !photos) { + return; + } } } else { final storage = await Permissions.checkPermission( diff --git a/lib/ui/widgets/video_screen.dart b/lib/ui/widgets/video_screen.dart index 75e9891..a484869 100644 --- a/lib/ui/widgets/video_screen.dart +++ b/lib/ui/widgets/video_screen.dart @@ -86,13 +86,22 @@ class _VideoScreenState extends TIMUIKitState { final DeviceInfoPlugin deviceInfo = DeviceInfoPlugin(); AndroidDeviceInfo androidInfo = await deviceInfo.androidInfo; if ((androidInfo.version.sdkInt) >= 33) { - final videos = await Permissions.checkPermission( + // Android 13+: 优先检查管理外部存储权限以访问所有资源 + final manageExternalStorage = await Permissions.checkPermission( context, - Permission.videos.value, + Permission.manageExternalStorage.value, ); + + if (!manageExternalStorage) { + // 如果没有管理外部存储权限,则检查视频权限 + final videos = await Permissions.checkPermission( + context, + Permission.videos.value, + ); - if (!videos) { - return; + if (!videos) { + return; + } } } else { final storage = await Permissions.checkPermission(