Как обновить панель уведомлений при загрузке файла? - PullRequest
0 голосов
/ 17 мая 2019

Может кто-нибудь объяснить мне, что я делаю не так, я загружаю файл и у меня есть индикатор выполнения уведомлений, который обновляется.Индикаторы выполнения работают «нормально», потому что они обновляются, но проблема в том, что когда загрузка функции завершена, мой индикатор выполнения не обновляется с сообщением «Complete», и я пытаюсь скрыть индикатор выполнения, выполнивэто ...

 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;
        }

    }

Ответы [ 2 ]

1 голос
/ 17 мая 2019

Вы можете попробовать сделать это внутри цикла 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());

                    }
1 голос
/ 17 мая 2019

Попробуйте вот так

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;

Ссылка: https://stackoverflow.com/a/16435330/5502638

...