优雅地在高版本Android将文件保存到磁盘

Android对于文件存储的限制正在日趋严格。事实上,从Android 11(Android R)开始,那些传统的文件保存和读取方式统统失效了。

而高版本Android中存/取文件操作,百度到的内容是可行的,但是非常麻烦,比如:

洋洋洒洒一堆又臭又长不知所云的代码😡😡😡。

本文介绍一种现代且优雅的高版本Android存储文件到公共目录的方法(读取的方法见上一篇)。

总共分两步。

1、声明一个保存文件的launcher

Result API是取代ActivityForResult的一个现代Android接口。高版本Android中改变了很多的运行逻辑,比如说在上一篇提到的,如果要读取或者存储一个文件,就调用系统文件窗口,如果用户选择了一个文件而且确定返回了,自然而然也就意味着用户同意该应用读取/存储文件,当然也就不用再申请相关的文件权限,这是理所当然的。

像上篇那样,只需要先声明一个打开系统保存文件的activity(类似于Windows上面的SaveFileDialog),同样只需要一行代码:

val saveFileLauncher = rememberLauncherForActivityResult(contract = CreateDocument("*/*"), onResult = {
        uri ->
        uri?.let {
            val output = context.contentResolver.openOutputStream(it)
            output?.let {
                    os ->
                scope.launch(Dispatchers.IO) {
                    vm.downloadFile(
                        context.fileList(),
                        file,
                        os)
                }
            }
        }
    })

没错,这实际上也确实只是一行代码。😁😁😁

这个启动器(launcher)里面,包含了用户保存文件后的回调,这里直接用contentResolver打开一个输出流,就可以把下载的文件的流输出到输出流中。

2、在合适的位置打开启动器(launcher)

合适位置,比如说button的点击事件里面,也是只需要一行代码:

saveFileLauncher.launch(it)

这里的it,是你想要的默认的保存文件的名字,包含后缀,当然在打开的launcher也是可以修改文件名的。

总共两行代码😁😊🤣

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值