【问题标题】:Convert DriveId to human readable path将 DriveId 转换为人类可读的路径
【发布时间】:2016-05-14 16:20:32
【问题描述】:

在我的应用程序中,我正在编写一个将本地数据库备份到 Google 云端硬盘的活动。我让用户使用 Drive 的 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==...。

【问题讨论】:

  • 当您获得 mFolderDriveId 时,我建议您发出元数据提取请求并仅向用户显示文件夹名称。由于用户刚刚通过浏览他的驱动器选择了该文件夹,因此他已经有了足够的上下文。要获得完整路径,您需要一直访问所选文件夹的祖先,直到根目录,这对于具有 Drive FILE 范围的应用程序来说是不期望的。

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


【解决方案1】:

使用 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。

我希望它对你有用。

【讨论】:

  • 谢谢,所以我现在可以使用 Drive Andorid SDK 而不是 Rest API 来做到这一点,对吧?
【解决方案2】:

正如之前所建议的,即使可能,对于具有 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());
                }
            }
        );
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-30
    • 2021-03-14
    • 2013-01-20
    相关资源
    最近更新 更多