6

我想将 Google Drive 与我的应用程序集成我已在 Google Developers Console 中注册了我的应用程序。我从https://github.com/googledrive/android-demos获得了一个示例。通过这个我可以在 Google 驱动器的根文件夹中创建一个文件,文件夹,但问题是我无法在一个现有文件夹。在这种情况下,我得到了祝酒词“找不到 DriveId。您有权查看此文件吗?” 即我无法获得驱动器ID

public class CreateFolderInFolderActivity extends BaseDemoActivity {

@Override
public void onConnected(Bundle connectionHint) {
    super.onConnected(connectionHint);
    Drive.DriveApi.fetchDriveId(getGoogleApiClient(), EXISTING_FOLDER_ID)
            .setResultCallback(idCallback);
}

final ResultCallback<DriveIdResult> idCallback = new ResultCallback<DriveIdResult>() {
    @Override
    public void onResult(DriveIdResult result) {
        if (!result.getStatus().isSuccess()) {
             showMessage(result.getStatus().toString());
            showMessage("Cannot find DriveId. Are you authorized to view this file?");
            return;
        }
        DriveFolder folder = Drive.DriveApi
                .getFolder(getGoogleApiClient(), result.getDriveId());
        MetadataChangeSet changeSet = new MetadataChangeSet.Builder()
                .setTitle("MyNewFolder").build();
        folder.createFolder(getGoogleApiClient(), changeSet)
                .setResultCallback(createFolderCallback);
    }
};

final ResultCallback<DriveFolderResult> createFolderCallback = new
        ResultCallback<DriveFolderResult>() {

    @Override
    public void onResult(DriveFolderResult result) {
        if (!result.getStatus().isSuccess()) {
            showMessage("Problem while trying to create a folder");
            return;
        }
        showMessage("Folder successfully created");
    }
};
}

我找不到任何合适的文档。请帮助我哪里出错或者我是否必须包含任何其他权限

4

3 回答 3

4

你可以看看这里:在' createTree() '方法中,在一个文件夹中创建了一个文件夹。

新的 Google Drive Android API (GDAA) 中有 3 个不同的驱动器 ID 实体

  1. DriveID 类型的对象 - 您从方法中获得并在代码中使用的对象
  2. 您从encodeToString()获得并传递给decodeFromString()的字符串- 用于保存在应用程序中(例如缓存)
  3. 您从getResourceId()获得并传递给fetchDriveId()的字符串- 您在文件的 html 地址中看到的字符串。

2 和 3 标识符都是字符串,所以它们可能会混淆。检索驱动器 ID(通过 decodeFromString())时,标识符 2 更快。标识符 3 的检索速度较慢(通过 fetchDriveId()),但如果您需要将您的 ID 带到其他地方(例如,Apps 脚本),它会很有用。

另请参阅:SO 21800257

于 2014-03-09T18:16:04.570 回答
1

EXISTING_FOLDER_ID 是什么?如果您试图直接运行示例而不进行任何更改,这将不起作用。

您需要将 EXISTING_FOLDER_ID 更改为您的应用有权访问的文件夹的资源 ID。这可能是您的应用在根目录中创建的文件夹。

于 2014-03-04T20:52:27.210 回答
0

首先使用 creatreeTree() 创建文件夹

然后运行搜索查询以获取 create 的 idpublic static ArrayList<ContentValues> search(String prnId, String titl, String mime) { ArrayList<ContentValues> gfs = new ArrayList<>(); if (mGOOSvc != null && mConnected) 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(), gFl.getMimeType())); } //else UT.lg("failed " + gFl.getTitle()); npTok = gLst.getNextPageToken(); qry.setPageToken(npTok); } } while (npTok != null && npTok.length() > 0); //UT.lg("found " + vlss.size()); } catch (Exception e) { UT.le(e); } return gfs; }

当您获得文件夹 id 时,使用此代码在文件夹中创建文件夹 `public static ParentReference insertFileIntoFolder(Drive service, String folderId, String folderName) throws IOException {

// Log.e("founddd",id); 文件文件元数据 = 新文件();fileMetadata.setParents(Collections.singletonList(new ParentReference().setId(folderId == null ? "root" : folderId))); fileMetadata.setTitle(文件夹名); fileMetadata.setMimeType("application/vnd.google-apps.folder");

        File file  = mGOOSvc.files().insert(fileMetadata).execute();

        System.out.println("Folder ID: " + file.getId());
        strChildFolder = file.getId();




    return null;
}`
于 2016-04-20T05:59:12.880 回答