You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android USB OTG存储导出应用数据及目录多文件写入方法咨询

你的需求完全可实现,不需要自定义USB通信,用系统自带的存储访问框架(SAF)即可满足,你当前实现单文件写入用的就是SAF的能力。

你提到的USB主机模式自定义通信虽然也能做到,但需要自行处理USB设备枚举、存储文件系统解析等底层逻辑,开发成本高、兼容性问题多,没有特殊要求的话完全没必要走这个方案。


向USB目录批量写入多文件实现方案

核心逻辑是调用ACTION_OPEN_DOCUMENT_TREE让用户授权你访问USB存储下的指定目录,拿到目录Uri后通过DocumentFile类操作即可批量创建、写入文件,示例代码如下:

1. 注册目录选择启动器

// 注册目录选择启动器
private val dirRequestLauncher = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result ->
    if (result.resultCode == Activity.RESULT_OK) {
        result.data?.data?.let { dirUri ->
            // 持久化权限,避免下次进入应用需要重新授权
            contentResolver.takePersistableUriPermission(
                dirUri,
                Intent.FLAG_GRANT_READ_URI_PERMISSION or Intent.FLAG_GRANT_WRITE_URI_PERMISSION
            )
            // 批量写入多个文件
            writeMultipleFilesToDir(dirUri, mapOf(
                "file1.txt" to "第一个文件内容",
                "file2.txt" to "第二个文件内容",
                "file3.txt" to "第三个文件内容"
            ))
        }
    }
}

2. 触发用户选择目标USB目录

private fun selectTargetDir() {
    val intent = Intent(Intent.ACTION_OPEN_DOCUMENT_TREE)
    // 可选:添加标记让用户选择界面默认展示外部存储入口
    intent.putExtra("android.provider.extra.INITIAL_URI", MediaStore.Files.getContentUri("external"))
    dirRequestLauncher.launch(intent)
}

3. 批量写入文件逻辑

private fun writeMultipleFilesToDir(dirUri: Uri, fileContentMap: Map<String, String>) {
    val dirDocument = DocumentFile.fromTreeUri(this, dirUri) ?: return
    // 提前检查目录写入权限
    if (!dirDocument.canWrite()) return

    fileContentMap.forEach { (fileName, content) ->
        // 创建对应文件,可根据需求修改MIME类型
        val fileDocument = dirDocument.createFile("text/plain", fileName)
        fileDocument?.uri?.let { fileUri ->
            // 直接复用你已实现的单文件写入方法即可
            writeInFile(fileUri, content)
        }
    }
}

注意事项

  • Android 11及以上版本对SAF访问USB存储没有额外限制,只要用户完成目录授权即可正常读写
  • 大文件写入建议放在子线程执行,避免阻塞主线程导致ANR
  • 如果需要后台自动导出,只要提前拿到持久化的目录Uri,不需要用户每次手动选择

内容的提问来源于stack exchange,提问作者M. Liver

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 14:39:04