如何使用 Drive API for Android 以编程方式创建多个文件?
How to create multiple files programmatically using Drive API for Android?
我可以使用 CreateFileActivity.java 在 google 驱动器中创建单个文件。但是我想将两个或更多文件上传到 google 驱动器 time.How 是否可以在 google 驱动器中为 android 创建多个文件?
假设,您的 Android 设备上有多个文件,由 java.io.File objects 表示,具有已知名称(标题)和 mime类型:
java.io.File[] files = {...};
String[] names[] = {...};
String[] mimes[] = {...};
您可以使用此结构在 Google 驱动器(例如根目录)中创建一组文件:
com.google.android.gms.common.api.GoogleApiClient mGooApiClient;
void foo() {
for (int i = 0; i < files.length; i++) {
createFile(null, names[i], mimes[i], files[i]);
}
}
/***********************************************************************
* create file in GOODrive
* @param pFldr parent's ID, (null for root)
* @param titl file name
* @param mime file mime type
* @param file java.io.File (with content) to create
*/
void createFile(DriveFolder pFldr, final String titl, final String mime, final File file) {
DriveId dId = null;
if (mGooApiClient != null && mGooApiClient.isConnected() && titl != null && mime != null && file != null) try {
final DriveFolder parent = pFldr != null ? pFldr : Drive.DriveApi.getRootFolder(mGooApiClient);
if (pFldr == null) return; //----------------->>>
Drive.DriveApi.newDriveContents(mGAC).setResultCallback(new ResultCallback<DriveContentsResult>() {
@Override
public void onResult(DriveContentsResult driveContentsResult) {
DriveContents cont = driveContentsResult != null && driveContentsResult.getStatus().isSuccess() ?
driveContentsResult.getDriveContents() : null;
if (cont != null) try {
OutputStream oos = cont.getOutputStream();
if (oos != null) try {
InputStream is = new FileInputStream(file);
byte[] buf = new byte[4096];
int c;
while ((c = is.read(buf, 0, buf.length)) > 0) {
oos.write(buf, 0, c);
oos.flush();
}
}
finally { oos.close();}
MetadataChangeSet meta = new Builder().setTitle(titl).setMimeType(mime).build();
parent.createFile(mGooApiClient, meta, cont).setResultCallback(new ResultCallback<DriveFileResult>() {
@Override
public void onResult(DriveFileResult driveFileResult) {
DriveFile dFil = driveFileResult != null && driveFileResult.getStatus().isSuccess() ?
driveFileResult.getDriveFile() : null;
if (dFil != null) {
// save dFil, report success
} else {
// handle error
}
}
});
} catch (Exception e) {e.printStackTrace();}
}
});
} catch (Exception e) { e.printStackTrace(); }
}
不要忘记保存 DriveFile(或 DriveId)或创建的文件。
祝你好运
我可以使用 CreateFileActivity.java 在 google 驱动器中创建单个文件。但是我想将两个或更多文件上传到 google 驱动器 time.How 是否可以在 google 驱动器中为 android 创建多个文件?
假设,您的 Android 设备上有多个文件,由 java.io.File objects 表示,具有已知名称(标题)和 mime类型:
java.io.File[] files = {...};
String[] names[] = {...};
String[] mimes[] = {...};
您可以使用此结构在 Google 驱动器(例如根目录)中创建一组文件:
com.google.android.gms.common.api.GoogleApiClient mGooApiClient;
void foo() {
for (int i = 0; i < files.length; i++) {
createFile(null, names[i], mimes[i], files[i]);
}
}
/***********************************************************************
* create file in GOODrive
* @param pFldr parent's ID, (null for root)
* @param titl file name
* @param mime file mime type
* @param file java.io.File (with content) to create
*/
void createFile(DriveFolder pFldr, final String titl, final String mime, final File file) {
DriveId dId = null;
if (mGooApiClient != null && mGooApiClient.isConnected() && titl != null && mime != null && file != null) try {
final DriveFolder parent = pFldr != null ? pFldr : Drive.DriveApi.getRootFolder(mGooApiClient);
if (pFldr == null) return; //----------------->>>
Drive.DriveApi.newDriveContents(mGAC).setResultCallback(new ResultCallback<DriveContentsResult>() {
@Override
public void onResult(DriveContentsResult driveContentsResult) {
DriveContents cont = driveContentsResult != null && driveContentsResult.getStatus().isSuccess() ?
driveContentsResult.getDriveContents() : null;
if (cont != null) try {
OutputStream oos = cont.getOutputStream();
if (oos != null) try {
InputStream is = new FileInputStream(file);
byte[] buf = new byte[4096];
int c;
while ((c = is.read(buf, 0, buf.length)) > 0) {
oos.write(buf, 0, c);
oos.flush();
}
}
finally { oos.close();}
MetadataChangeSet meta = new Builder().setTitle(titl).setMimeType(mime).build();
parent.createFile(mGooApiClient, meta, cont).setResultCallback(new ResultCallback<DriveFileResult>() {
@Override
public void onResult(DriveFileResult driveFileResult) {
DriveFile dFil = driveFileResult != null && driveFileResult.getStatus().isSuccess() ?
driveFileResult.getDriveFile() : null;
if (dFil != null) {
// save dFil, report success
} else {
// handle error
}
}
});
} catch (Exception e) {e.printStackTrace();}
}
});
} catch (Exception e) { e.printStackTrace(); }
}
不要忘记保存 DriveFile(或 DriveId)或创建的文件。
祝你好运