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

Google Drive SDK for Android: How to get folder id if I know folder title

我需要将文件上传到之前由另一个用户创建的 Google 驱动器上的文件夹,我知道文件夹名称,如何从 android 应用程序以编程方式获取文件夹 ID,如果我知道文件夹名称(标题)。

你的post有两个问题:

  1. 如何上传其他用户创建的文件夹中的文件?

回答。首先,您需要对该文件夹具有写权限才能在该文件夹中插入一些内容。如果您知道标题和文件以及目标文件夹,则可以使用 CreateFileActivityBuilder class 在文件夹中创建文件。您还可以使用此 class 指定文件的初始元数据和内容。

这里是代码和详细的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. 获取已知文件夹的文件夹ID:

回答。您至少需要知道 DriveID 才能检索特定文件夹的 folderID。使用文件夹的名称,您将无法检索 folderID,因为可能有很多文件夹名称相同但 ID 不同。

这里是代码和详细的documentation:

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

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

我们希望将来能够将云端硬盘范围添加到 Android API,但是我现阶段无法分享时间表。如果您可以在我们的 issue tracker.

上分享有关此功能用例的更多详细信息,那就太好了

在此期间,您应该能够通过 Java REST API.

支持您的用例

正如丹尼尔指出的那样,您必须在您的案例中使用 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

祝你好运