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

时间:2016-09-21 06:47:32

标签: 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. 请求更改
  4. 最后:我的应用程序正在使用原生Google Drive Android API。因此,通过添加此功能,我突然需要两个API而不是一个,即使我需要其中一个仅用于轮询更改的简单任务。更糟糕的是,用户理论上可以使用一个帐户登录到一个API,使用另一个帐户登录到另一个帐户。这没有任何意义。我得到大量额外开销关键功能取决于用户使用同一帐户登录两次。这个问题有解决方案吗?
  5. 我觉得非常令人沮丧的是,有两个Google Drive API可供开始使用。如果你最初什么都不知道的话,你必须深入挖掘甚至开始并发现确切的差异。 我仍然没有区别,或者为什么其中一个人无法看到自己创建的文件。

1 个答案:

答案 0 :(得分:1)

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

  

只要指定的文件文件夹对其内容或元数据进行了更改,您就可以使用更改侦听器接收通知。更改侦听器实现ChangeListenerChangeEvent接口,并从Drive服务接收直接回调到当前连接的客户端应用程序。

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

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

除了将侦听器添加到您希望接收事件的文件或文件夹之外,您的应用程序还必须实现您传入的回调(在此示例中为 changeListener ) strong> addChangeListener 方法调用。下面演示了一个回调函数,它将接收到的事件打印到日志中。

/**
 * 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以获取更多信息。

希望它有所帮助!