diff --git a/app/src/main/java/io/legado/app/ui/book/cache/CacheActivity.kt b/app/src/main/java/io/legado/app/ui/book/cache/CacheActivity.kt index bc3540548..a2b0c4573 100644 --- a/app/src/main/java/io/legado/app/ui/book/cache/CacheActivity.kt +++ b/app/src/main/java/io/legado/app/ui/book/cache/CacheActivity.kt @@ -263,6 +263,8 @@ class CacheActivity : VMBaseActivity() val path = ACache.get().getAsString(exportBookPathKey) if (path.isNullOrEmpty()) { selectExportFolder(position) + } else if (FileDoc.fromUri(path.parseToUri(), true).checkWrite() != true) { + selectExportFolder(position) } else if (enableCustomExport()) {// 启用自定义导出 and 导出类型为Epub configExportSection(path, position) } else { diff --git a/app/src/main/java/io/legado/app/ui/config/BackupConfigFragment.kt b/app/src/main/java/io/legado/app/ui/config/BackupConfigFragment.kt index e65571c5f..a026c6ca9 100644 --- a/app/src/main/java/io/legado/app/ui/config/BackupConfigFragment.kt +++ b/app/src/main/java/io/legado/app/ui/config/BackupConfigFragment.kt @@ -274,7 +274,7 @@ class BackupConfigFragment : PreferenceFragment(), if (backupPath.isContentScheme()) { val uri = Uri.parse(backupPath) val doc = DocumentFile.fromTreeUri(requireContext(), uri) - if (doc?.canWrite() == true) { + if (doc?.checkWrite() == true) { waitDialog.setText("备份中…") waitDialog.setOnCancelListener { backupJob?.cancel() diff --git a/app/src/main/java/io/legado/app/utils/FileDocExtensions.kt b/app/src/main/java/io/legado/app/utils/FileDocExtensions.kt index 3a5aa5f5e..4b65f136c 100644 --- a/app/src/main/java/io/legado/app/utils/FileDocExtensions.kt +++ b/app/src/main/java/io/legado/app/utils/FileDocExtensions.kt @@ -287,6 +287,16 @@ fun FileDoc.delete() { asDocumentFile()?.delete() } +fun FileDoc.checkWrite(): Boolean? { + if (!isDir) { + throw NoStackTraceException("只能检查目录") + } + asFile()?.let { + return it.checkWrite() + } + return asDocumentFile()?.checkWrite() +} + /** * DocumentFile 的 listFiles() 非常的慢,尽量不要使用 */