有人可以解释一下我在做什么错,我正在下载文件,并且有一个通知进度栏,该进度栏会更新。 进度条正在“精细”运行,因为它已更新,但是问题是当函数下载完成时, 我的进度条没有更新为“完成”的消息,因此我尝试通过此方法隐藏进度条...
notification.setProgress(0, 0, false);
notification.setContentTitle("Complete");
notification.setOngoing(false);
notification.setPriority(NotificationCompat.PRIORITY_HIGH);
notificationManager.notify(idd, notification.build());
Log.e(TAG, "1");
我的程序忽略所有这些,只记录1
private boolean saveFile(ResponseBody body, String fileName, String id) {
try {
// todo change the file location/name according to your needs
File futureStudioIconFile = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS), fileName);
InputStream inputStream = null;
OutputStream outputStream = null;
final int idd = Integer.parseInt(id);
Intent activityIntent = new Intent(this, MainActivity.class);
PendingIntent contentIntent = PendingIntent.getActivity(this, 0, activityIntent, 0);
final NotificationCompat.Builder notification = new NotificationCompat.Builder(this, CHANNEL_2_ID)
.setSmallIcon(R.drawable.ic_cloud_download_black_24dp)
.setContentTitle("Download")
.setContentText("Downloading in process")
.setPriority(NotificationCompat.PRIORITY_HIGH)
.setContentIntent(contentIntent);
notificationManager.notify(idd, notification.build());
try {
byte[] fileReader = new byte[4096];
long fileSize = body.contentLength();
long fileSizeDownloaded = 0;
inputStream = body.byteStream();
outputStream = new FileOutputStream(futureStudioIconFile);
while (true) {
int read = inputStream.read(fileReader);
if (read == -1) {
break;
}
outputStream.write(fileReader, 0, read);
fileSizeDownloaded += read;
Log.e(TAG, "file download: " + fileSizeDownloaded + " of " + fileSize);
Long fileSizeD = fileSizeDownloaded;
Long fileS = fileSize;
int down = fileSizeD.intValue();
int max = fileS.intValue();
Log.e(TAG, "MAX: " + max + " Down: "+ down);
notification.setProgress(max, down, false);
notificationManager.notify(idd, notification.build());
}
outputStream.flush();
notification.setProgress(0, 0, false);
notification.setContentTitle("Downloasdfasad");
notification.setOngoing(false);
notification.setPriority(NotificationCompat.PRIORITY_HIGH);
notificationManager.notify(idd, notification.build());
Log.e(TAG, "1");
return true;
} catch (IOException e) {
return false;
} finally {
if (inputStream != null) {
inputStream.close();
}
if (outputStream != null) {
outputStream.close();
}
}
} catch (IOException e) {
return false;
}
}
答案 0 :(得分:1)
尝试这样
Intent activityIntent = new Intent(this, MainActivity.class);
PendingIntent contentIntent = PendingIntent.getActivity(this, 0, activityIntent, 0);
final NotificationCompat.Builder notification = new NotificationCompat.Builder(this, CHANNEL_2_ID)
.setSmallIcon(R.drawable.ic_cloud_download_black_24dp)
.setContentTitle("Download")
.setOnlyAlertOnce(true)
.setContentText("Downloading in process")
.setPriority(NotificationCompat.PRIORITY_HIGH)
.setContentIntent(contentIntent);
notificationManager.notify(idd, notification.build());
再来一次
notification.setProgress(0, 0, false);
notification.setContentTitle("Download Finished");
notificationManager.notify(idd, notification.build());
Log.e(TAG, "1");
return true;
答案 1 :(得分:1)
您可以尝试在while循环中执行此操作
我不确定这是否是正确的方法,但可以解决您的问题
int max2 = max - 62500;
if( max2 > down) {
notification.setProgress(max, down, false);
notificationManager.notify(idd, notification.build());
} else {
notification.setProgress(0, 0, false);
notification.setContentText("Download Complete");
notificationManager.notify(idd, notification.build());
}