У меня есть приложение, которое загружает файл с сервера, у меня есть список файлов, которые пользователь может загрузить.
Пользователь нажимает кнопку загрузки 1 и начинает загрузку файлов, если пользователь нажимает кнопку загрузки 2 после завершения загрузки 1, он начинает загрузку второй загрузки третьей и ......
Моя проблема в том, что, когда программа завершает одну загрузку, она обновляет панель уведомлений, чтобы завершить загрузку, а также отправляет "намерение", поэтому, когда пользователь нажимает на уведомление, оно отправляет идентификатор загрузки,
проблема в том, что если я скачаю больше одного файла, все намерения будут иметь один и тот же идентификатор ....
Ex:
Я нажимаю donwlod 1 --- идентификатор для этой загрузки 123
если это единственный файл, который я загружаю, в порядке.
но если щелкнуть загрузку 2 --- идентификатор этой загрузки: 4321
Когда загрузка 2 будет завершена, на моей верхней панели я должен уведомить одну для загрузки 1 и другую для загрузки 2
и оба уведомления имеют одинаковый идентификатор в намерении "4321"
private boolean saveFile(ResponseBody body, String fileName, String id) {
final int final_id = 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_minload_black_24dp)
.setContentTitle("Download")
.setOnlyAlertOnce(true)
.setContentText("Downloading......")
.setPriority(NotificationCompat.PRIORITY_LOW)
.setContentIntent(contentIntent);
notificationManager.notify(final_id, notification.build());
try {
File futureStudioIconFile = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_minLOADS), fileName);
InputStream inputStream = null;
OutputStream outputStream = null;
try {
byte[] fileReader = new byte[4096];
long fileS = body.contentLength();
long fileDonwloaded = 0;
inputStream = body.byteStream();
outputStream = new FileOutputStream(futureStudioIconFile);
while (true) {
int read = inputStream.read(fileReader);
if (read == -1) {
break;
}
outputStream.write(fileReader, 0, read);
fileDonwloaded += read;
Long fileSD = fileDonwloaded;
Long fileS = fileS;
int min = fileSD.intValue();
int max = fileS.intValue();
int max2 = max - 1000000;
if( max2 > min) {
notification.setProgress(max, min, false);
notificationManager.notify(final_id, notification.build());
} else {
Intent notificationIntent = new Intent(getApplicationContext(), MainActivity.class);
String id_d = Integer.toString(final_id);
notificationIntent.putExtra("ID" , id_d);
notificationIntent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP | Intent.FLAG_ACTIVITY_CLEAR_TASK);
PendingIntent pendingNotificationIntent = PendingIntent.getActivity(getApplicationContext(),0,notificationIntent,PendingIntent.FLAG_UPDATE_CURRENT);
notification.setContentText("Downnload Finished");
notification.setProgress(0, 0, false);
notification.setSmallIcon(R.drawable.ic_cloud_done_black_24dp);
notification.setOngoing(false);
notification.setAutoCancel(true);
notification.setContentIntent(pendingNotificationIntent);
notificationManager.notify(final_id, notification.build());
}
}
return true;
} catch (IOException e) {
return false;
} finally {
if (inputStream != null) {
inputStream.close();
}
if (outputStream != null) {
outputStream.close();
}
}
} catch (IOException e) {
return false;
}
}