我正在使用带有 imap 协议的 JavaMail 来访问我的 Gmail 帐户并从附件 BodyPart 获取 InputStream。问题是当我开始下载文件时,我想显示下载进度,但是下载了文件却没有显示进度。我尝试注销循环内读取的字节,下载过程完成后我得到了所有日志。
编辑:似乎我使用 getInputStream() 获得的 InputStream 对象已经保存了所有内容,这意味着内容已经下载到我的系统内存中的某个位置,并且当我读取该数据时,它会非常快速地传输给我。
我为此使用 AsyncTask。有任何想法吗?谢谢。
protected Void doInBackground() {
InputStream is = bodyPart.getInputStream();
BufferedInputStream bis = new BufferedInputStream(is);
FileOutputStream fos = new FileOutputStream(f);
int bytesRead;
byte[] buf = new byte[MySettings.DOWNLOAD_BUFFER_SIZE];
while ((bytesRead = bis.read(buf)) != -1) {
totalBytes += bytesRead;
publishProgress((int)(((double)((double)totalBytes/(double)size))*100));
fos.write(buf, 0, bytesRead);
}
fos.flush();
fos.close();
bis.close();
mDialog.dismiss();
}
protected void onProgressUpdate(Integer... progress) {
mDialog.setProgress(progress[0]);
}
@Override
protected void onPreExecute() {
mDialog = displayWorkingDialog(messageWhileDownloading, c);
}
public void displayWorkingDialog(String message, Context c) {
mDialog = new ProgressDialog(c);
mDialog.setMessage(message);
mDialog.setCancelable(true);
mDialog.setIndeterminate(false);
mDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
mDialog.show();
}