gpt4 book ai didi

android - 来自 Intent.ACTION_OPEN_DOCUMENT 提供的 Android URI 的文件上次修改时间

转载 作者:行者123 更新时间:2023-12-02 17:20:42 45 4
gpt4 key购买 nike

我需要编写一个 Android 应用程序来观察另一个应用程序何时修改文件,然后从中读取数据。该文件由用户选择。所以我想使用 Intent 以及设备上可用的文件选择器供用户选择文件。

使用 Intent.ACTION_OPEN_DOCUMENT 执行此操作会返回一个 URI。我可以打开一个 InputStream 并将文件读入 File 实例,然后检查上次修改日期。然而,每 5 秒左右将文件内容复制到 File 实例中只是为了检查它是否已被修改,这在资源方面似乎是浪费。我显然不能使用 File 实例和从流中复制一次的数据来继续检查上次修改时间,我必须每次都继续复制它。

有没有办法使用 URI 获取最后修改时间?或者使用 Intent 获取实际文件/绝对路径?我发现了一些非常复杂的方法来从 URI 获取绝对路径,但它们似乎太复杂了,而且我还没有找到任何我愿意使用并确信它可以在不同版本的 Android 上运行的东西。

还有其他解决方案吗?

最佳答案

请注意,对于 Android 10+ 及以上版本,您将无法直接使用 file://。 Android 正在推送 content://来代替。

要从intent.ACTION_GET_CONTENT/OPEN_DOCUMENT/etc之后的URI中提取lastModified日期,您可以使用contentProvider.query()

DocumentsContract.Document ( https://developer.android.com/reference/android/provider/DocumentsContract.Document ) 中列出了可提取的可用列

下面是提取最后更新时间的代码。

contentResolver.query( uri, null, null, null, null  )?.use { c ->

val dateMod: Long = try {
val colDateModified = c
.getColumnIndexOrThrow(DocumentsContract.Document.COLUMN_LAST_MODIFIED)
c.moveToFirst()
c.getLong(colDateModified)
} catch (e: Exception) {
0
}
print("Date modified : $dateMod")
}

关于android - 来自 Intent.ACTION_OPEN_DOCUMENT 提供的 Android URI 的文件上次修改时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48473565/

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