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 4ea0801..77e8302 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 @@ -278,12 +278,25 @@ object FileSDK { private fun resolveBaseDir(context: Context, destination: FileDownloadDestination): File = when (destination) { FileDownloadDestination.PublicDownloads -> { val appName = context.applicationInfo.loadLabel(context.packageManager).toString() - File( + val dir = File( android.os.Environment.getExternalStoragePublicDirectory( android.os.Environment.DIRECTORY_DOWNLOADS ), appName, - ).apply { mkdirs() } + ) + // mkdirs() 在部分华为/小米设备上静默失败,多重尝试确保目录存在 + if (!dir.exists()) { + dir.mkdirs() + } + if (!dir.exists()) { + runCatching { Runtime.getRuntime().exec(arrayOf("mkdir", "-p", dir.absolutePath)).waitFor() } + } + if (!dir.exists()) { + android.util.Log.w("XWV", "resolveBaseDir: cannot create ${dir.absolutePath}, falling back to Sandbox") + context.getExternalFilesDir(null) ?: context.filesDir + } else { + dir + } } FileDownloadDestination.Sandbox -> { context.getExternalFilesDir(null) ?: context.filesDir