![](/img/trans.png)
[英]How to get a File using MediaStore.Downloads for a file in the Downloads directory?
[英]Android R – Create a text file in Download folder using Scoped storage (MediaStore.Downloads)
我的應用程序需要在下載文件夾中的文本文件中保存一個字符串。 目前(目標: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),如果我理解得很好,我必須將其遷移到范圍存儲 (MediaStore.Downloads)。
在這里,我有點迷路了。 我找不到好的文檔或片段來說明如何在下載中創建文本文件。 如果有人可以解釋或展示如何做到這一點,我會很感激?
剛剛在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建議如果您創建了文件,您將能夠使用文件 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
我還附上了文件管理器中出現的文件的屏幕截圖:
PS:這里是可怕的一次性代碼——I/O 在主線程等上工作。僅用於說明目的。
基於評論“R.= 30”:我對“R”和 Api“30”的用法基於 AndroidStudio IDE:
(R = 運行時環境,Api 30 = sdk 運行時)
如果我誤解了某些東西,或者在某種程度上語義上不正確,很高興進行編輯。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.