在 Google 云端硬盘上创建文件

我们将在 Google 云端硬盘上添加一个文件。我们将使用 Drive 对象的 createFile() 方法在 Google 云端硬盘上以编程方式创建文件。在这个例子中,我们在用户的根文件夹中添加一个新的文本文件。添加文件时,我们需要指定初始元数据集,文件内容和父文件夹。

我们需要创建一个 CreateMyFile() 回调方法,在这个方法中,使用 Drive 对象来检索 DriveContents 资源。然后我们将 API 客户端传递给 Drive 对象并调用 driveContentsCallback 回调方法来处理 DriveContents 的结果。

DriveContents 资源包含文件二进制流的临时副本,该副本仅对应用程序可用。

public void CreateMyFile(){
    fileOperation = true;
    // Create new contents resource.
    Drive.DriveApi.newDriveContents(mGoogleApiClient)
                  .setResultCallback(driveContentsCallback);
}

DriveContents 的结果处理程序

处理响应需要检查呼叫是否成功。如果呼叫成功,我们可以检索 DriveContents 资源。

我们将创建 DriveContents 的结果处理程序。在这个方法中,我们调用 CreateFileOnGoogleDrive() 方法并传递 DriveContentsResult 的结果:

/**
 * This is the Result result handler of Drive contents.
 * This callback method calls the CreateFileOnGoogleDrive() method.
 */
final ResultCallback<DriveContentsResult> driveContentsCallback =
         new ResultCallback<DriveContentsResult>() {
            @Override
            public void onResult(DriveContentsResult result) {
                if (result.getStatus().isSuccess()) {
                    if (fileOperation == true){
                        CreateFileOnGoogleDrive(result);
                    }
                }
            }
        };

以编程方式创建文件

要创建文件,我们需要使用 MetadataChangeSet 对象。通过使用此对象,我们设置标题(文件名)和文件类型。此外,我们必须使用 DriveFolder 类的 createFile() 方法并传递 Google 客户端 API,MetaDataChangeSet 对象和 driveContents 来创建文件。我们调用结果处理程序回调来处理创建文件的结果。

我们使用以下代码在用户的根文件夹中创建一个新的文本文件:

/**
 * Create a file in the root folder using a MetadataChangeSet object.
 * @param result
 */
public void CreateFileOnGoogleDrive(DriveContentsResult result){

    final DriveContents driveContents = result.getDriveContents();

    // Perform I/O off the UI thread.
    new Thread() {
        @Override
        public void run() {
            // Write content to DriveContents.
            OutputStream outputStream = driveContents.getOutputStream();
            Writer writer = new OutputStreamWriter(outputStream);
            try {
                writer.write("Hello Christlin!");
                writer.close();
            } catch (IOException e) {
                Log.e(TAG, e.getMessage());
            }

            MetadataChangeSet changeSet = new MetadataChangeSet.Builder()
                    .setTitle("My First Drive File")
                    .setMimeType("text/plain")
                    .setStarred(true).build();

            // Create a file in the root folder.
            Drive.DriveApi.getRootFolder(mGoogleApiClient)
                    .createFile(mGoogleApiClient, changeSet, driveContents)
                    setResultCallback(fileCallback);
        }
   }.start();
}

处理创建文件的结果

以下代码将创建一个回调方法来处理创建文件的结果:

/**
 * Handle result of Created file
 */
final private ResultCallback<DriveFolder.DriveFileResult> fileCallback = new
        ResultCallback<DriveFolder.DriveFileResult>() {
            @Override
            public void onResult(DriveFolder.DriveFileResult result) {
                if (result.getStatus().isSuccess()) {
                    Toast.makeText(getApplicationContext(), "file created: "+
                                result.getDriveFile().getDriveId(), Toast.LENGTH_LONG).show();
                }
                return;
            }
        };