Download progress listener does not start (Google Drive API)

I want to show the progress of the percentage of the downloaded file using the Google Drive APIs.

My menthod successfully uploaded the file before, but it cannot see the download progress.

I saw and added this FileUploadProgressListener , but mediaHttpUploader.getProgress() only shows 0.0 (start of turn) and 1.0 (when progress is complete). I can’t get the percentage of progress over time.

How to make it work?

Here is my download code:

 public void UploadFile(final DFile uploadFile) { if (!isLoggedIn()) { OnUploadGoogleChecked(FALSE, "Not logged in"); return; } AsyncTask<Void, Long, String> task = new AsyncTask<Void, Long, String>() { java.io.File fileContent; FileContent mediaContent; com.google.api.services.drive.model.File body; com.google.api.services.drive.model.File file; private ProgressDialog mDialog; long mFileLen; @Override protected void onPreExecute() { // TODO Auto-generated method stub super.onPreExecute(); mDialog = new ProgressDialog(act); mDialog.setMax(100); mDialog.setMessage("Uploading "); mDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); mDialog.setProgress(0); mDialog.setButton("Cancel", new OnClickListener() { @Override public void onClick(DialogInterface arg0, int arg1) { // TODO Auto-generated method stub } }); mDialog.show(); } class FileUploadProgressListener implements MediaHttpUploaderProgressListener { @Override public void progressChanged(MediaHttpUploader uploader) throws IOException { Log.d("Dolphin got percent", String.valueOf(uploader.getProgress())); switch (uploader.getUploadState()) { case INITIATION_STARTED: System.out.println("Initiation Started"); break; case INITIATION_COMPLETE: System.out.println("Initiation Completed"); break; case MEDIA_IN_PROGRESS: System.out.println("Upload in progress"); System.out.println("Upload percentage: " + uploader.getProgress()); break; case MEDIA_COMPLETE: System.out.println("Upload Completed!"); break; case NOT_STARTED: System.out.println("Upload Not Started!"); break; } } } @Override protected String doInBackground(Void... arg0) { try { java.io.File UPLOAD_FILE = new java.io.File(uploadFile.getNameAndDir()); // File metadata. fileContent = new java.io.File(uploadFile.getNameAndDir()); mFileLen = fileContent.length(); InputStreamContent mediaContent2 = new InputStreamContent("image/jpeg", new BufferedInputStream(new FileInputStream(UPLOAD_FILE))); mediaContent2.setLength(UPLOAD_FILE.length()); body = new com.google.api.services.drive.model.File(); body.setTitle(fileContent.getName()); body.setMimeType("image/jpeg"); String parentId = null; body.setParents(Arrays.asList(new ParentReference().setId(uploadFile.getFileHostFolderId()))); Drive.Files.Insert mInsert = service.files().insert(body, mediaContent2); MediaHttpUploader uploader = mInsert.getMediaHttpUploader(); uploader.setDirectUploadEnabled(true); uploader.setProgressListener(new FileUploadProgressListener()); file = mInsert.execute(); if (file != null) { } } catch (UserRecoverableAuthIOException e) { Log.d("Dolphin got error", "not login " + e); } catch (IOException e) { e.printStackTrace(); } return null; } protected void onPostExecute(String result) { mDialog.dismiss(); OnUploadGoogleChecked(TRUE, "Upload complete"); }; }; task.execute(); } 
+3
source share
1 answer

To make progress, you should use uploader.setDirectUploadEnabled(false); (instead of true ) and uploader.setChunkSize(MediaHttpUploader.MINIMUM_CHUNK_SIZE); or any value that should be multiplied by MediaHttpUploader.MINIMUM_CHUNK_SIZE , otherwise it will cause an error.

+7
source

Source: https://habr.com/ru/post/1257764/


All Articles