将DriveId转换为人类可读路径

时间:2016-05-14 16:20:32

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

在我的应用中,我编写了一项活动,将本地数据库备份到Google云端硬盘。我让用户使用云端硬盘intentPicker选择要保存文件的文件夹,并将结果保存在我的OnActivityResult中:

@Override
    protected void onActivityResult(final int requestCode, final int resultCode, final Intent data) {
        switch (requestCode) {
            // REQUEST_CODE_PICKER
            case 2:
                intentPicker = null;

                if (resultCode == RESULT_OK) {
                    //Get the folder's drive id
                    DriveId mFolderDriveId = data.getParcelableExtra(
                            OpenFileActivityBuilder.EXTRA_RESPONSE_DRIVE_ID);

                    uploadToDrive(mFolderDriveId);
                }

上传文件后,我想向用户显示保存文件的位置。所以,我需要将文件夹的DriveId转换为人类可读的路径,例如 / drive / MyBackups / May

我已经尝试driveId.toString,但它只返回一个字符串,其中包含无用的数字和字母DriveId:CASDFAD2Jmasdf==...

2 个答案:

答案 0 :(得分:2)

使用文件夹的Drive API方法,请注意Drive Rest API中提供的这些重要键 - Work with Folders

  • 文件夹是MIME类型为application/vnd.google-apps.folder但没有扩展名的文件。
  • 您可以使用别名root来引用提供文件ID的任何位置的根文件夹

使用这些给定的键,您可以在查询中添加父ID,并参考您要查找的文件,然后您可以按照此SO帖子中给出的逻辑进行操作 - What's the right way to find files by “full path” in Google Drive API v2

我希望它对你有用。

答案 1 :(得分:0)

正如之前建议的那样,即使可能,对于具有Drive FILE范围的应用程序,也不会显示文件夹的完整路径。所以我解决了它请求元数据并只显示标题。

    private void setBackupFolderTitle(DriveId id){
        id.asDriveFolder().getMetadata((mGoogleApiClient)).setResultCallback(
            new ResultCallback<DriveResource.MetadataResult>() {
                @Override
                public void onResult(DriveResource.MetadataResult result) {
                    if (!result.getStatus().isSuccess()) {
                        showErrorDialog();
                        return;
                    }
                    Metadata metadata = result.getMetadata();
                    // Set folder title in TextView
                    folderTextView.setText(metadata.getTitle());
                }
            }
        );
    }