android - Google Drive REST/Android API - 查找云端硬盘文件夹的更改集

标签 android google-drive-api google-drive-android-api

我的目标是在用户的驱动器上有一个可以放置文件的文件夹。然后,我的 Android 应用程序应该检测(通过轮询)驱动器上的此文件夹中创建/上传了新文件并下载它。

到目前为止一切顺利。我尝试使用 Google Drive Android API 执行此操作,但我了解到,使用 Google Drive Android API 我只能访问由我的应用程序创建的文件。因此,如果用户通过其他设备(例如台式计算机)将照片放入此文件夹中,我什至看不到该文件,更不用说它是否是新创建的了。

有人告诉我,我可以使用 Google Drive REST API (v3) 来提取自上次查看以来发生的更改。

Drive.Changes.List request = drive.changes().list(startPageToken);
ChangeList changes = request.execute();

这确实有效。但是,我对这种方法存在三个问题:

  1. 我确实得到了 changes 的列表包含驱动器上更改的所有文件。然而,我没有得到变更集。我不知道到底发生了什么变化。是重命名、创建、移动、删除、内容更改吗?我用谷歌搜索了一下,我似乎是唯一对此感到好奇的人。我怎么知道到底发生了什么变化?
  2. 正如我所描述的,我想观看单个文件夹。如何仅请求对单个文件夹进行更改?
  3. 最后:我的应用程序正在使用 native Google Drive Android API。因此,添加此功能后,我突然需要两个 API,而不是一个,尽管我只需要其中一个 API 来完成轮询更改的简单任务。更糟糕的是,理论上用户可以使用一个帐户登录一个 API,然后使用另一个帐户登录另一个 API。这没有任何意义。我获得了大量额外开销,并且关键功能取决于用户使用同一帐户登录两次。这个问题有解决办法吗?

一开始就有两个可用的 Google Drive API,这让我感到非常沮丧。如果你一开始什么都不知道,你就必须深入挖掘才能开始并发现确切的区别。 我仍然不明白其中的区别,也不明白为什么其中一个无法查看不是自己创建的文件。

最佳答案

您可以尝试查看有关 Listening for Change Events 的文档:

You can use change listeners to receive notifications whenever a specified file or folder has changes to its contents or metadata. A change listener implements the ChangeListener interface for the ChangeEvent and receives a direct callback from the Drive service to a currently connected client application.

以下示例代码显示了您可能实现的向文件添加更改监听器的逻辑:

DriveFile file = Drive.DriveApi.getFile(mGoogleApiClient,
        mSelectedFileId);
file.addChangeListener(mGoogleApiClient, changeListener);

In addition to adding the listener to the file or folder you wish to receive events for, your application must also implement the callback (changeListener in this example) you passed in the addChangeListener method call. The following demonstrates a callback that prints the received events to a log.

/**
 * A listener to handle file change events.
 */
final private ChangeListener changeListener = new ChangeListener() {
    @Override
    public void onChange(ChangeEvent event) {
        mLogTextView.setText(String.format("File change event: %s", event));
    }
};

对于采取操作的回调,例如检索最新版本,您可以使用 hasContentChangedhasMetadataChanged确定文件内容、元数据或两者是否已更改的方法。

有关完整的工作示例,请参阅 ListenChangeEventsForFilesActivity样本在 Google Drive Android API Demos app .

您还可以查看此相关问题22980497获取更多信息。

希望对你有帮助!

关于android - Google Drive REST/Android API - 查找云端硬盘文件夹的更改集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39609268/

相关文章:

android - 使用 Android 打开 Google 云端硬盘中的特定文件夹

android - 在数据库中存储查询语句

java - Gradle 突然无法构建。找不到 Gradle DSL 方法 : 'android()'

c# - 如何使用 Google.Apis.Drive.V3 断开(删除访问)谷歌驱动器?

javascript - 谷歌驱动器 API 超出用户速率限制

Android 授权 google drive api

android - 在 Google 云端硬盘上创建文件夹 (Android)

java - Android R.java 未生成并出现以下错误

android - Firebase 远程配置 : condition limitations

Java:如何将 com.google.api.services.drive.model.File 转换为 InputStream?