Android:获取DriveId进行还原

时间:2016-03-31 08:04:07

标签: android google-drive-api

我的应用在Google云端硬盘上采用了基于云的备份。备份顺利进行。

我使用以下代码进行备份:

void saveToDrive() {
    // Code to upload file
    DriveId mDriveId = metadataResult.getMetadata().getDriveId();
    SharedPreferences sharedPreferences = getApplicationContext().getSharedPreferences(getApplicationContext().getPackageName(), MODE_PRIVATE);
    sharedPreferences.edit().putString("DriveId", mDriveId.encodeToString()).apply();
    ....
}

如您所见,我在备份时将DriveId保存到SharedPreferences。所以使用DriveId,我可以恢复为:

void readFromDrive(DriveId mDriveId) { // DriveId is not available after app reinstall!!
    // Code to download file and restore
}

我的还原操作需要DriveId才能下载备份文件。我想在重新安装应用时触发恢复 。但是,我能够获得DriveId,以便我可以下载所需的文件。

我该怎么做?拜托,我迫切需要一些帮助。

感谢。

1 个答案:

答案 0 :(得分:1)

我首先使用以下代码查询Google云端硬盘的内容来解决这个问题:

public class GDriveQuery extends BaseDemo {
    @Override
    public void onConnected(Bundle connectionHint) {
        super.onConnected(connectionHint);
        Query query = new Query.Builder()
            .addFilter(Filters.eq(SearchableField.TITLE, "field"))
            .addFilter(Filters.not(Filters.eq(SearchableField.TRASHED, true)))
            .build();
        Drive.DriveApi.query(getGoogleApiClient(), query)
            .setResultCallback(metadataCallback);
    }

    final private ResultCallback<DriveApi.MetadataBufferResult> metadataCallback =
        new ResultCallback<DriveApi.MetadataBufferResult>() {
            @Override
            public void onResult(DriveApi.MetadataBufferResult result) {
                if (!result.getStatus().isSuccess()) {
                    showMessage("Problem while retrieving results");
                    return;
                }
                System.out.println("SUCCESS!!");
                MetadataBuffer mdb;
                mdb = result.getMetadataBuffer();
                for (Metadata md : mdb) {
                    System.out.println(md.getDriveId().encodeToString());
                }
            }
        };
}

上面的代码将DriveId归还给我。然后使用DriveId我使用上面问题中公布的函数readFromDrive(driveId)

它有效!!

感谢各位帮助。