Google Drive SDK for Android:如果我知道文件夹标题,如何获取文件夹ID

时间:2015-09-22 21:13:16

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

我需要将文件上传到以前由其他用户创建的Google云端硬盘中的文件夹,我知道文件夹名称,如果我知道文件夹名称(标题),如何从Android应用程序以编程方式获取文件夹ID。

3 个答案:

答案 0 :(得分:1)

Drive Android API目前仅支持每个文件访问,称为文件范围。用户需要通过文件选择器选择文件夹才能授权您的应用访问它。

我们希望以后能够将Android范围添加到Android API,但是我无法在此阶段共享时间轴。如果您可以在issue tracker上分享有关此功能的更多使用案例详情,那就太棒了。

在此期间,您应该能够使用Java REST API支持您的用例。

答案 1 :(得分:1)

正如Daniel指出的那样,你必须在你的情况下使用REST Api。更具体地说,这是一种方法:

static com.google.api.services.drive.Drive mGOOSvc;

/**************************************************************************
 * find file/folder in GOODrive
 * @param prnId   parent ID (optional), null searches full drive, "root" searches Drive root
 * @param titl    file/folder name (optional)
 * @param mime    file/folder mime type (optional)
 * @return        arraylist of found objects
 */
static ArrayList<ContentValues> search(String prnId, String titl, String mime) {
  ArrayList<ContentValues> gfs = new ArrayList<>();
  if (mGOOSvc != null) try {
    // add query conditions, build query
    String qryClause = "'me' in owners and ";
    if (prnId != null) qryClause += "'" + prnId + "' in parents and ";
    if (titl != null) qryClause += "title = '" + titl + "' and ";
    if (mime != null) qryClause += "mimeType = '" + mime + "' and ";
    qryClause = qryClause.substring(0, qryClause.length() - " and ".length());
    Drive.Files.List qry = mGOOSvc.files().list().setQ(qryClause)
      .setFields("items(id,mimeType,labels/trashed,title),nextPageToken");
    String npTok = null;
    if (qry != null) do {
      FileList gLst = qry.execute();
      if (gLst != null) {
        for (File gFl : gLst.getItems()) {
          if (gFl.getLabels().getTrashed()) continue;
          gfs.add( UT.newCVs(gFl.getTitle(),gFl.getId()));
        }
        npTok = gLst.getNextPageToken();
        qry.setPageToken(npTok);
      }
    } while (npTok != null && npTok.length() > 0);
  } catch (Exception e) { /* handle the exceptions*/ }
  return gfs;
}

您所追求的是 gFl.getId() 。您仍然必须获取 com.google.api.services.drive.Drive mGOOSvc 。有关完整背景信息,请参阅此Github demo

祝你好运

答案 2 :(得分:0)

您的帖子中有两个问题:

  1. 如何在其他用户创建的文件夹中上传文件?
  2. 答。首先,您需要拥有该文件夹的写入权限才能在该文件夹中插入一些内容。如果您已知道标题和文件以及目标文件夹,则可以使用 CreateFileActivityBuilder 类在文件夹中创建文件。您还可以使用此类指定文件的初始元数据和内容。

    以下是代码和详细documentation

    ResultCallback<DriveContentsResult> contentsCallback = new
            ResultCallback<DriveContentsResult>() {
        @Override
        public void onResult(DriveContentsResult result) {
            if (!result.getStatus().isSuccess()) {
                // Handle error
                return;
            }
    
            MetadataChangeSet metadataChangeSet = new MetadataChangeSet.Builder()
                    .setMimeType("text/html").build();
            IntentSender intentSender = Drive.DriveApi
                    .newCreateFileActivityBuilder()
                    .setInitialMetadata(metadataChangeSet)
                    .setInitialDriveContents(result.getDriveContents())
                    .build(getGoogleApiClient());
            try {
                startIntentSenderForResult(intentSender, 1, null, 0, 0, 0);
            } catch (SendIntentException e) {
                // Handle the exception
            }
        }
    }
    
    1. 获取名称已知的文件夹的folderID:
    2. 答。您需要至少知道DriveID才能检索特定文件夹的folderID。使用文件夹的名称,您将无法检索folderID,因为可能有许多文件夹具有相同的名称但ID不同。

      以下是代码和详细documentation

       private static DriveId sFolderId = DriveId.decodeFromString("DriveId:0B2EEtIjPUdX6MERsWlYxN3J6RU0");