存储访问框架 - 设置本地 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 的最后修改日期的主要内容,如果未能解决你的问题,请参考以下文章

如何设置我的本地 Git 存储库以使用我刚刚创建的新个人访问令牌? [复制]

使用实体框架6将数据从数据库存储到本地

使用Google云端硬盘上的存储访问框架存储文件

android glide的框架使用

h5怎么在本地打开?

如何按照我们设置的顺序从本地存储中检索数据