From 2a9b1c0f364a4873265d9ce2848e85e5a8fa2ab1 Mon Sep 17 00:00:00 2001 From: XuqmGroup Date: Fri, 5 Jun 2026 16:28:34 +0800 Subject: [PATCH] =?UTF-8?q?feat(file):=20=E6=B7=BB=E5=8A=A0=E6=96=87?= =?UTF-8?q?=E4=BB=B6=E4=B8=8B=E8=BD=BD=E5=AE=8C=E6=88=90=E5=90=8E=E6=89=93?= =?UTF-8?q?=E5=BC=80=E6=96=87=E4=BB=B6=E7=9A=84=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 导入 PendingIntent 相关类 - 在下载完成通知中添加打开文件的意图 - 实现构建打开文件 PendingIntent 的方法 - 使用 FileProvider 安全分享文件 URI - 根据文件扩展名获取正确的 MIME 类型 - 创建带读取权限的查看意图并设置标记兼容性 --- .../main/java/com/xuqm/sdk/file/FileSDK.kt | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/sdk-core/src/main/java/com/xuqm/sdk/file/FileSDK.kt b/sdk-core/src/main/java/com/xuqm/sdk/file/FileSDK.kt index 8149f91..8306959 100644 --- a/sdk-core/src/main/java/com/xuqm/sdk/file/FileSDK.kt +++ b/sdk-core/src/main/java/com/xuqm/sdk/file/FileSDK.kt @@ -2,6 +2,7 @@ package com.xuqm.sdk.file import android.app.NotificationChannel import android.app.NotificationManager +import android.app.PendingIntent import android.content.Context import android.content.Intent import android.net.Uri @@ -218,6 +219,7 @@ object FileSDK { .setSmallIcon(android.R.drawable.stat_sys_download_done) .setContentTitle(notificationTitle) .setContentText("下载完成:$resolvedName") + .setContentIntent(buildOpenFilePendingIntent(context, target)) .setAutoCancel(true) .build(), ) @@ -281,6 +283,24 @@ object FileSDK { }) } + private fun buildOpenFilePendingIntent(context: Context, file: File): PendingIntent? = + runCatching { + val mimeType = MimeTypeMap.getSingleton() + .getMimeTypeFromExtension(file.extension.lowercase()) + ?: "application/octet-stream" + val uri = FileProvider.getUriForFile(context, "${context.packageName}.fileprovider", file) + val view = Intent(Intent.ACTION_VIEW).apply { + setDataAndType(uri, mimeType) + addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION or Intent.FLAG_ACTIVITY_NEW_TASK) + } + val chooser = Intent.createChooser(view, null).apply { + addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) + } + val flags = PendingIntent.FLAG_UPDATE_CURRENT or + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) PendingIntent.FLAG_IMMUTABLE else 0 + PendingIntent.getActivity(context, file.absolutePath.hashCode(), chooser, flags) + }.getOrNull() + private fun uniqueFile(dir: File, name: String): File { val base = name.substringBeforeLast('.', name) val ext = name.substringAfterLast('.', "").let { if (it.isEmpty()) "" else ".$it" }