[英]How to show uploading to Google Drive progress in my android App?
我有以下代碼
這應該將圖像從我的 android 設備上傳到我的 google Drive。
private void saveFileToDrive() {
progressDialog = ProgressDialog.show(this, "", "Loading...");
Thread t = new Thread(new Runnable() {
@Override
public void run() {
try {
// File's binary content
java.io.File fileContent = new java.io.File(fileUri.getPath());
FileContent mediaContent = new FileContent("image/jpeg", fileContent);
// File's metadata.
File body = new File();
body.setTitle(fileContent.getName());
body.setMimeType("image/jpeg");
File file = service.files().insert(body, mediaContent).execute();
if (file != null) {
showToast("Photo uploaded: " + file.getTitle());
progressDialog.dismiss();
//startCameraIntent();
}
} catch (UserRecoverableAuthIOException e) {
startActivityForResult(e.getIntent(), REQUEST_AUTHORIZATION);
} catch (IOException e) {
e.printStackTrace();
}
}
});
t.start();
}
問題是上傳永遠不會結束。 這很奇怪,因為圖像不太大
我想如果我通過原始 Drive App 上傳它,它會做得更快。
1)如何顯示上傳進度?
2)上傳完成后如何在同一個Activity中進行回調?
從Google雲端硬盤下載文件:
您可以使用AsyncTask,您可以在其中從url獲取輸入流,並編寫while循環以讀取每一行並在對話框中顯示下載的數據,如下所示。
@Override protected Boolean doInBackground(FilesObject... files) { // getting an input Stream. HttpResponse resp = service.getRequestFactory() .buildGetRequest(new GenericUrl(file.SourceImageUrl)).execute(); fileSize = resp.getHeaders().getContentLength(); if (fileSize != -1) { fileSizeReadableString = DiskSpaceUtil.readableFileSize(fileSize); } InputStream is = resp.getContent(); // publishing the progress in a dialog. int completed = 0; while ((length = inputStream.read(buffer)) > 0) { if (!this.isCancelled()) { completed += length; fOutputStream.write(buffer, 0, length); publishProgress(completed); } else { fOutputStream.flush(); fOutputStream.close(); inputStream.close(); return; } } @Override protected void onProgressUpdate(Integer... values) { sendShowloader("Downloading file ... \\n" + DiskSpaceUtil.readableFileSize(number) + " of " + fileSizeReadableString); }
您可以使用固有的Google雲端硬盤下載監聽器,可以使用插入對象進行設置。
將文件上傳到Google雲端硬盤:
我們可以使用Google自己的MediaHttpUploaderProgressListener實現將文件上傳到google驅動器,如下所示:
{ // ... Inside some thread
java.io.File fil = new java.io.File(file.SourceImageUrl);
InputStream is = new FileInputStream(fil);
InputStreamContent mediaContent = new InputStreamContent(file.mimeType, is);
mediaContent.setLength(fil.length());
// File's metadata.
File body = new File();
body.setTitle(file.FileTitle);
body.setMimeType(file.mimeType);
body.setParents(parents);
body.setDescription("Content Uploaded to "+ DriveName);
// Inserting the Remote Resource into Google Drive
File destFile = null;
if(fil.length() > 5 * 1024 * 1024)
{
// Resumable Uploads when the file size exceeds a file size of 5 MB.
// check link :
// 1) https://code.google.com/p/google-api-java-client/source/browse/drive-cmdline-sample/src/main/java/com/google/api/services/samples/drive/cmdline/DriveSample.java?repo=samples&r=08555cd2a27be66dc97505e15c60853f47d84b5a
// 2) http://stackoverflow.com/questions/15970423/uploading-downloading-of-large-size-file-to-google-drive-giving-error
Insert insert = mService.files().insert(body, mediaContent);
MediaHttpUploader uploader = insert.getMediaHttpUploader();
uploader.setDirectUploadEnabled(false);
uploader.setProgressListener(new FileUploadProgressListener());
destFile = insert.execute();
}
else
{
// Else we go by Non Resumable Uploads, which is safe for small uploads.
destFile = mService.files().insert(body, mediaContent).execute();
}
... }
// Now the implementation of FileUploadProgressListener which extends MediaHttpUploaderProgressListener
public static class FileUploadProgressListener implements MediaHttpUploaderProgressListener {
public void progressChanged(MediaHttpUploader uploader) throws IOException {
switch (uploader.getUploadState()) {
case INITIATION_STARTED:
postToDialog("Initiation Started");
break;
case INITIATION_COMPLETE:
postToDialog("Initiation Completed");
break;
case MEDIA_IN_PROGRESS:
// postToDialog("Upload in progress");
postToDialog("Upload percentage: " + uploader.getProgress());
break;
case MEDIA_COMPLETE:
postToDialog("Upload Completed!");
break;
case NOT_STARTED :
postToDialog("Not Started!");
break;
}
}
}
只需先檢查您的網絡連接!!!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.