存储访问框架 - 设置本地 DocumentFile 的最后修改日期
Posted
技术标签:
【中文标题】存储访问框架 - 设置本地 DocumentFile 的最后修改日期【英文标题】:Storage Access Framework - set last modified date of local DocumentFile 【发布时间】:2016-06-15 03:42:23 【问题描述】:我想将文件从内部存储复制或移动到 SD 卡。我通过存储访问框架 (SAF) 和 DocumentFile
类来做到这一点...
复制是基于流的,DocumentFile
没有类似File
类的功能来设置最后修改日期。
我知道,我将文件移动/复制到 sd 卡,所以我知道我创建了一个本地文件。有了这些信息,是否有可能更新DocumentFile
的基础文件的最后修改日期?
您似乎无法在不丢失上次修改日期的情况下将文件从内部存储移动/复制到 sd 卡...
阅读 - 工作
public long lastModified(DocumentFile file, Context context)
long lastModified = 0;
final Cursor cursor = context.getContentResolver().query(file.getUri(), null, null, null, null);
try
if (cursor.moveToFirst())
lastModified = cursor.getLong(cursor.getColumnIndexOrThrow(DocumentsContract.Document.COLUMN_LAST_MODIFIED));
finally
cursor.close();
return lastModified;
写作 - 不工作
public boolean setLastModified(DocumentFile file, Context context, long time)
ContentValues updateValues = new ContentValues();
updateValues.put(DocumentsContract.Document.COLUMN_LAST_MODIFIED, time);
int updated = context.getContentResolver().update(file.getUri(), updateValues, null, null);
return updated == 1;
这会因java.lang.UnsupportedOperationException: Update not supported
异常而失败...
【问题讨论】:
很抱歉,我无法为您解答,但我对如何使用存储访问框架移动和复制文件感兴趣。你能帮我吗?或者你有教程的链接吗? 我这样做的方式是通过流。移动是复制+删除(重命名仅在文件夹未更改的情况下有效)。如果您愿意,可以查看我的 UNDOCUMENTED 库:github.com/MFlisar/StorageManager/blob/master/lib/src/main/java/…。检查那里的initDefaultHandlers
,它显示了如何使用我的包装类复制/移动文件...
【参考方案1】:
您可能需要清单中的“android.permission.WRITE_USER_DICTIONARY”权限
【讨论】:
【参考方案2】:由于 API >=26,您可以使用刷新。这应该可以立即更新 Documentfile。这对我有用:
context.getContentResolver().refresh(file.getUri(), null, null, null);
【讨论】:
以上是关于存储访问框架 - 设置本地 DocumentFile 的最后修改日期的主要内容,如果未能解决你的问题,请参考以下文章