在 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;
            }
        };