【问题标题】:How to get metadata from files or folders in Google Drive on Android?如何从 Android 上的 Google Drive 中的文件或文件夹中获取元数据?
【发布时间】:2016-10-23 06:29:07
【问题描述】:

我想从 Android 设备上的 Google Drive 中的文件或文件夹中检索元数据,以获取 deviceID 或 resourceID,然后我可以将文件下载到设备的本地存储中。我的应用程序的问题是,该应用程序不需要用户交互。这意味着,只需告诉应用程序名称,然后应用程序将尝试在每个目录中查找文件并下载它。 我尝试使用query (link) 遵循快速入门教程,但它只返回现有文件的名称。

再次注意:用户不需要选择文件或文件夹,只需告诉文件名即可。并且文件或文件夹也是由应用程序创建的。

【问题讨论】:

  • 文件的元数据是否包含deviceId?请解释一下。
  • 还要解释为什么需要 deviceId 来下载文件。
  • @greenapps,我不太确定。我在developers.google.com/drive/android/metadata 中阅读了信息,他们说它包含有关文件或文件夹的所有详细信息。那么这是否意味着它也包含 deviceID ?为什么我需要 deviceID 来下载文件?因为我看到很多示例表明,当我们需要从谷歌驱动器中检索文件时,我们需要有 deviceID 或 resourceID。我不太确定所有这些,因为我找不到足够的例子,而且大多数情况下它们都很难理解。
  • it contain all details about a file or folder. So doesn't it mean that it include deviceID too?。嗯,我不知道,所以请你解释一下。我希望你会发现。祝你好运。
  • @greenapps,你知道如何找到 deviceid 或 resourceId 吗?现在花了好几个星期,但我仍然找不到任何答案。只需在后台检索 deviceid 或 resourceid 而无需用户交互。那么你有过这方面的经验吗?

标签: android google-drive-api


【解决方案1】:

如何从 Android 版 Google Drive 中的文件或文件夹中获取元数据?

根据Working with File and Folder Metadata

元数据封装在元数据类中,包含有关文件或文件夹的所有详细信息,包括标题、MIME 类型以及文件是否可编辑、加星标或已删除。通过调用 DriveResource.getMetadata 方法为 DriveResource 获取元数据。

这是来自文档的 sn-p:

/**
 * An activity to retrieve the metadata of a file.
 */
public class RetrieveMetadataActivity extends BaseDemoActivity implements
        ResultCallback {

    @Override
    public void onConnected(Bundle connectionHint) {
        DriveFile file = Drive.DriveApi.getFile(getGoogleApiClient(),
                DriveId.decodeFromString("0ByfSjdPVs9MZcEE3bzJCc3NsRkE"));
        file.getMetadata(getGoogleApiClient()).setResultCallback(metadataRetrievedCallback);

    }

    ResultCallback<MetadataResult> metadataRetrievedCallback = new
            ResultCallback<MetadataResult>() {
        @Override
        public void onResult(MetadataResult result) {
            if (!result.getStatus().isSuccess()) {
                showMessage("Problem while trying to fetch metadata");
                return;
            }
            Metadata metadata = result.getMetadata();
            showMessage("Metadata succesfully fetched. Title: " + metadata.getTitle());
        }
    }
}

如何获取资源 ID?

仍然在用于 Drive 的 Android API 上,DriveId 类有一个方法 getResourceId (),它返回资源 ID。

如何获取设备 ID?

我认为您不能使用 Android Drive API 来获取此信息。您似乎误认为这是您将用于Download Files 的文件ID。

在 Google 云端硬盘中手动查找 fileID:

如果是电子表格文件

https://docs.google.com/spreadsheets/d/1pE9ejBTBH38oCoOHU2O42qU6vzxagAJ9J1237dYB1Eg/edit#gid=0

fileID -> 1pE9ejBTBH38oCoOHU2O42qU6vzxagAJ9J1237dYB1Eg

如果是doc文件:

   https://docs.google.com/document/d/1Fh6s7an-7I6VuDBxZKcxcaU3cG1XpSryHQXGnznWlns/edit

fileID -> 1Fh6s7an-7I6VuDBxZKcxcaU3cG1XpSryHQXGnznWlns

你得到了模式。它是 URL 中的一串字母数字字符。

【讨论】:

  • 嗨@noogui!你能解释一下下面的代码吗?大多数情况下,我不明白在哪里可以得到这个字符串“0ByfSjdPVs9MZcEE3bzJCc3NsRkE”。它是否可以识别 Google Drive 中的任何文件?如果是这样,每个文件都相同吗?我怎样才能得到这个字符串呢? DriveFile 文件 = Drive.DriveApi.getFile(getGoogleApiClient(), DriveId.decodeFromString("0ByfSjdPVs9MZcEE3bzJCc3NsRkE"));
  • 这是一个文件ID。 Google 云端硬盘中的每个文件都有一个唯一的文件 ID
  • 那么你知道我如何通过文件名从任何文件中获取那些fileid吗?
  • 类似 result.getDriveFile().getDriveId();如this thread中所述。
  • 这是程序化方法,我的答案中添加了手动方式。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-17
  • 1970-01-01
相关资源
最近更新 更多