gpt4 book ai didi

Android R – 使用范围存储 (MediaStore.Downloads) 在下载文件夹中创建一个文本文件

转载 作者:行者123 更新时间:2023-12-04 02:28:27 30 4
gpt4 key购买 nike

我的应用程序需要将字符串保存在下载文件夹中的文本文件中。目前(目标:API 29(Q)我正在使用 FILE API:

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
android:requestLegacyExternalStorage="true"
但是对于 API 30 (R),如果我理解得很好,我必须将它迁移到 Scoped storage (MediaStore.Downloads)。
在这里,我有点失落。我找不到很好的文档或 fragment 来展示如何在下载中创建文本文件。如果有人可以解释或展示如何做到这一点,我会很高兴?

最佳答案

刚刚在 AndrioidManifest.xml 中使用上述设置进行了测试:

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
android:requestLegacyExternalStorage="true"
授予这些权限并在运行 API 30 (R) 的模拟器上,我能够使用以下简单代码编写/读取/更新文本文件:
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)


if(ActivityCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED) {
val f = File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS), "new_file.txt")
f.appendText("test ${Instant.now().toEpochMilli()}\n")

f.readLines().forEach { line -> Log.e("LOG", line)}
}
}
这篇文章: https://stackoverflow.com/a/64192581/4252352建议如果您创建了文件,您将能够使用 File api 访问它。注: Environment.getExternalStoragePublicDirectory已弃用,但如果您是文件的所有者,它似乎甚至可以在 Android 11 上运行。
只是为了好玩,我在目标版本和编译版本 29/30 之间进行了交换,以查看在针对不同的 sdk 并在同一个模拟器上重新安装同一个应用程序时是否会发生任何事情。它工作得很好,无论如何我都可以完全访问同一个文件。
老实说,整件事有点困惑——CommonsWare https://commonsware.com/blog/2019/12/21/scoped-storage-stories-storing-mediastore.html 的这篇文章这是一本很好的读物,因为它涉及到现在在 Android 11 中强制执行的许多事情,尽管它主要谈论的是 Android 10。
文档似乎在许多不同的地方被与存储/范围存储等相关的部分分开。此表格链接为根据初始用例筛选文档提供了良好的起点: https://developer.android.com/training/data-storage
我还附上了文件管理器中出现的文件的屏幕截图:
File Manager
PS:这里有可怕的一次性代码 - I/O 在主线程等上工作 .. 仅用于说明目的。
基于评论“R!= 30”。我对“R”和 Api“30”的使用是基于 AndroidStudio IDE 的:
Andriod versions
(R = 运行时环境,Api 30 = 运行时的 sdk)
如果我误解了某些东西,或者在某种程度上在语义上不正确,我很高兴进行编辑。

关于Android R – 使用范围存储 (MediaStore.Downloads) 在下载文件夹中创建一个文本文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65743960/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com