使用 SAF 访问 Google 驱动器时如何刷新内容

Posted

技术标签:

【中文标题】使用 SAF 访问 Google 驱动器时如何刷新内容【英文标题】:How to refresh the content when accessing Google drive with SAF 【发布时间】:2016-09-21 08:52:52 【问题描述】:

我正在尝试使用以下代码从我的应用程序中的 Google 驱动器访问 PDF 文件:

Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
intent.addCategory(Intent.CATEGORY_OPENABLE);
intent.setType("application/pdf");
startActivityForResult(intent, MY_ACTION_OPEN_DOCUMENT);

直接取自 Google 的文档。我可以让文件选择器出现。但是有两个问题:

    无法刷新文件选择器的内容。 在我转到实际的 Google Drive 应用并在那里执行刷新之前,不会出现新添加到 Google Drive 帐户的文件。

我想知道我的实现中是否缺少某些东西。我试图在网上搜索,但令人惊讶的是没有发现任何相关的东西。更令人惊讶的是,我在使用 gmail 应用时遇到了同样的问题。

提前致谢。

【问题讨论】:

你找到解决办法了吗? 对不起,大卫,但没有。事实上,我在 6 月份向 android 提交了日志 (Issue 211953),但状态仍然是“新”... 我还没有尝试过,但似乎应该可以使用您要更新的路径的URI调用notifyChange,请参见medium.com/google-developers/… 嗨大卫,感谢您提供的信息,如果有任何成功,请告诉我。 我可能在这里遗漏了一些东西,但从您提供的链接来看,notifyChange() 似乎在 DocumentProvider 中使用。就我而言,我不是在写新的,而是在尝试使用 Google Drive 的 DocumentProvider。因此,不是应该在 Google 的代码中调用 notifyChange() 而不是我的代码吗? 【参考方案1】:

存储访问框架确实在活动/选定的提供者(queryDocument 和 queryChildDocuments)上调用回调。由 Google 驱动器文档提供商负责同步和通知 SAF。 SAF 甚至支持大尺寸的流文件。同步逻辑本身是依赖于打盹模式等的实现逻辑。

在最坏的情况下,用户始终可以在文档查看器上下拉刷新以触发相同的回调。

https://medium.com/androiddevelopers/building-a-documentsprovider-f7f2fb38e86a。

【讨论】:

感谢您的更新。我很确定在 2016 年问这个问题时向下滑动是不可用的。很高兴这个问题终于得到解决。

以上是关于使用 SAF 访问 Google 驱动器时如何刷新内容的主要内容,如果未能解决你的问题,请参考以下文章

Google api refresh_token null 以及如何刷新访问令牌

使用 SAF(存储访问框架)的 Android SD 卡写入权限

如何从 Google Calendar API 获取刷新的令牌

Google OAuth - 访问令牌和刷新令牌之间的区别 [重复]

如何在没有 SSL 的情况下使用刷新令牌刷新谷歌访问令牌?

Google Analytics:从刷新令牌中获取访问令牌