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