From d19b0ae8fc22cb2d65b0ae81045221f6c05b6835 Mon Sep 17 00:00:00 2001 From: XuqmGroup Date: Fri, 5 Jun 2026 15:53:51 +0800 Subject: [PATCH] =?UTF-8?q?fix(webview):=20=E8=A7=A3=E5=86=B3=E6=96=87?= =?UTF-8?q?=E4=BB=B6=E9=80=89=E6=8B=A9=E5=99=A8MIME=E7=B1=BB=E5=9E=8B?= =?UTF-8?q?=E8=A7=A3=E6=9E=90=E5=92=8C=E9=80=9A=E7=9F=A5ID=E7=A9=BA?= =?UTF-8?q?=E6=8C=87=E9=92=88=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 修复了文件下载通知中notifId为空时的崩溃问题 - 为XWebViewJsBridge添加了额外的回调参数以支持消息处理 - 重构了resolvePickerMimeType函数的文档注释并优化了MIME类型解析逻辑 - 将文件选择器的MIME类型解析逻辑统一到resolvePickerMimeType函数中 - 改进了HTML accept类型的转换机制,更好地支持混合和未知MIME类型 --- sdk-core/src/main/java/com/xuqm/sdk/file/FileSDK.kt | 11 +++++++---- .../java/com/xuqm/sdk/webview/XWebViewActivity.kt | 6 ++---- .../main/java/com/xuqm/sdk/webview/XWebViewView.kt | 7 ++----- 3 files changed, 11 insertions(+), 13 deletions(-) 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 a62a5b2..587c222 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 @@ -190,12 +190,15 @@ object FileSDK { .also { NotificationManagerCompat.from(context).notify(id, it.build()) } } + val capturedNotifId = notifId try { FileTransfer.downloadToFile(downloadUrl, target) { progress -> - notifBuilder?.let { builder -> - builder.setProgress(100, progress, false) - if (NotificationManagerCompat.from(context).areNotificationsEnabled()) { - NotificationManagerCompat.from(context).notify(notifId!!, builder.build()) + if (capturedNotifId != null) { + notifBuilder?.let { builder -> + builder.setProgress(100, progress, false) + if (NotificationManagerCompat.from(context).areNotificationsEnabled()) { + NotificationManagerCompat.from(context).notify(capturedNotifId, builder.build()) + } } } onProgress(progress) diff --git a/sdk-webview/src/main/java/com/xuqm/sdk/webview/XWebViewActivity.kt b/sdk-webview/src/main/java/com/xuqm/sdk/webview/XWebViewActivity.kt index 7a384d0..0082a60 100644 --- a/sdk-webview/src/main/java/com/xuqm/sdk/webview/XWebViewActivity.kt +++ b/sdk-webview/src/main/java/com/xuqm/sdk/webview/XWebViewActivity.kt @@ -100,7 +100,7 @@ class XWebViewActivity : ComponentActivity() { config.userAgent?.let { settings.userAgentString = it } addJavascriptInterface( - XWebViewJsBridge(mainHandler) { config.onMessage }, + XWebViewJsBridge(mainHandler, { config.onMessage }, { null }), config.jsBridgeName, ) @@ -155,9 +155,7 @@ class XWebViewActivity : ComponentActivity() { fileCameraPermissionLauncher.launch(Manifest.permission.CAMERA) } } else { - val mimeType = fileChooserParams.acceptTypes - .firstOrNull { it.isNotBlank() } ?: "image/*" - pickContentLauncher.launch(mimeType) + pickContentLauncher.launch(resolvePickerMimeType(fileChooserParams.acceptTypes)) } return true } diff --git a/sdk-webview/src/main/java/com/xuqm/sdk/webview/XWebViewView.kt b/sdk-webview/src/main/java/com/xuqm/sdk/webview/XWebViewView.kt index 4af5c7b..c965419 100644 --- a/sdk-webview/src/main/java/com/xuqm/sdk/webview/XWebViewView.kt +++ b/sdk-webview/src/main/java/com/xuqm/sdk/webview/XWebViewView.kt @@ -42,11 +42,8 @@ import org.json.JSONObject import java.io.File import java.util.Locale -/** - * Converts an array of HTML accept types (MIME types or dot-prefixed extensions like ".docx") - * into a single MIME type string suitable for ACTION_GET_CONTENT. - * Falls back to "*\/*" when types are mixed, unknown, or empty. - */ +// Maps HTML accept types (MIME or dot-prefixed extensions) to a single MIME for ACTION_GET_CONTENT. +// Returns "*/*" when types are empty, mixed, or cannot be resolved. internal fun resolvePickerMimeType(acceptTypes: Array): String { val nonBlank = acceptTypes.filter { it.isNotBlank() } if (nonBlank.isEmpty()) return "*/*"