如何在Google Drive Android API中获取已创建文件夹的DriveId

时间:2014-03-05 13:43:30

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

我的Google云端硬盘帐户中有文件夹,我想在特定文件夹中添加文件。我该怎么做?在example需要DriveId(EXISTING_FOLDER_ID),但我不知道DriveID我的文件夹,我只知道名字。

4 个答案:

答案 0 :(得分:4)

行。我在Github上使用Drive演示遇到了同样的问题:https://github.com/googledrive/android-demos

在自述文件的底部,它说:

  

如果你真的想要运行这个示例应用程序(虽然它主要是   提供以便您可以阅读代码),您需要注册OAuth   com.google.android.gms.drive.sample.demo包的2.0客户端,带有您自己的调试密钥,并将任何资源ID设置为您的那些   可使用。资源ID定义已打开:

     

com.google.android.gms.drive.sample.demo.BaseDemoActivity.EXISTING_FOLDER_ID   com.google.android.gms.drive.sample.demo.BaseDemoActivity.EXISTING_FILE_ID

他们没有真正指定应该如何获取并为BaseDemoActivity文件中定义的EXISTING_FOLDER_ID和EXISTING_FILE_ID常量设置resourceID,并且在阅读上面的seanpj注释后,我使用他的方法编号3来查找DriveID以便我可以将它添加到演示应用程序,以便它正常运行。

所有人需要做的就是在PC上转到Drive,然后点击顶部的“链接”按钮。

link on google drive

链接的一部分显示“id = XXXXXXXXXXX”。将其复制并粘贴到演示应用程序中的BaseDemoActivity文件中。对您在Drive上自己创建的文件和文件夹执行此操作。

演示应用程序现在应该成功运行。

答案 1 :(得分:3)

@smokybob。我不知道它是否对原始问题有帮助,但是根据你的评论:

这是一个应该为您提供文件夹/文件DriveId的代码段。 'title','mime'和'fldr'参数是可选的。如果您为'fldr'传递 null ,则搜索是全局的(在应用程序的FILE范围内),否则在指定的文件夹内(不在子文件夹中)。它使用最简单的'await()'风格,必须在UI线程上运行。

但请注意,文件夹/文件名不是Google Drive Universe中的唯一实体。 您可以在一个文件夹中拥有多个具有相同名称的文件/文件夹!

GoogleApiClent _gac;   // initialized elsewhere

//find files, folders. ANY 'null' ARGUMENT VALUE MEANS 'any'
public void findAll(String title, String mime, DriveFolder fldr) {
  ArrayList<Filter> fltrs = new ArrayList<Filter>();
  fltrs.add(Filters.eq(SearchableField.TRASHED, false));
  if (title != null)  fltrs.add(Filters.eq(SearchableField.TITLE, title));
  if (mime  != null)  fltrs.add(Filters.eq(SearchableField.MIME_TYPE, mime));
  Query qry = new Query.Builder().addFilter(Filters.and(fltrs)).build(); 
  MetadataBufferResult rslt = (fldr == null) ? 
    Drive.DriveApi.query(_gac, qry).await() : 
    fldr.queryChildren(_gac, qry).await();
  if (rslt.getStatus().isSuccess()) {
    MetadataBuffer mdb = null;
    try { 
      mdb = rslt.getMetadataBuffer();
      if (mdb != null) {
        for (Metadata md : mdb) {
          if (md == null) continue;
          DriveId dId  = md.getDriveId();      // here is the "Drive ID"         
          String title = md.getTitle();
          String mime  = md.getMimeType();
          // ...
        }
      }
    } finally { if (mdb != null) mdb.close(); } 
  }
}

一般而言,您可以从以下网址获取“DriveId”:

  1. 文件/文件夹名称,如上面的代码所示,或
  2. 你从'encodeToString()'获得的字符串标识符。我用它来缓存MYROOT文件夹id,或者
  3. 您从'getResourceId()'获得的字符串标识符。这是您在html地址中看到的字符串。但由于您的唯一范围是文件,因此不要指望使用它来打开您的应用程序未创建的内容。
  4. 2和3标识符都是字符串,因此可能会混淆。检索驱动器ID时,标识符2更快(通过decodeFromString())。标识符3的检索速度较慢(通过fetchDriveId()),但如果您需要在其他位置使用您的ID(例如,Apps脚本),则非常有用。另请参阅SO 21800257

    就创建文件/文件夹而言,我在GitHub here上有一些代码。如果你看看awaits \ MainActivity.java ... buildTree(),你会看到在构建一个简单的文件夹树时递归创建文件夹/文件。

答案 2 :(得分:3)

您可以使用查询来查找文件夹

Query query = new Query.Builder().addFilter(Filters.and(
                Filters.eq(SearchableField.TITLE, "folder name"),
                Filters.eq(SearchableField.TRASHED, false))).build();

我提供了一个示例教程 http://wiki.workassis.com/android-google-drive-api-deleted-folder-still-exists-in-query/ 在本教程中,他们以异步方式调用

答案 3 :(得分:0)

如果您拥有该文件夹的元数据(或DriveFolder对象,您可以从中获取元数据),则只需拨打getDriveId即可。

如果您拥有网络资源,则可以使用fetchDriveId

使用该资源ID获取DriveId