Как показать уведомление, которое добавляется как новое каждый раз, когда оно запускается из широковещательного приемника в Android

Я разрабатываю приложение для Android. В моем приложении я показываю уведомление, которое запускается изнутри широковещательного приемника. Отображение уведомления от получателя работает нормально. Но у меня есть небольшая проблема с тем, что я хочу, чтобы это было. Это уведомление о самоотмене. Не может быть закрыт пользователем.

Что происходит сейчас, так это то, что когда он запущен, он не добавляется в качестве нового уведомления в панель уведомлений, если оно уже существует. Просто существующий продолжает показывать. Я хочу, чтобы он добавлялся всякий раз, когда он запускается, независимо от того, сколько уведомлений, сделанных этим диспетчером уведомлений внутри приемника, существует.

Это мой приемник, который запускает уведомление о самозакрытии

public class GalleryImageUploadReceiver extends BroadcastReceiver {

    private Context context;
    private NotificationCompat.Builder notification;
    private static final int NOTIFICATION_ID = 1;
    private NotificationManager nm;

    @Override
    public void onReceive(Context pContext, Intent intent) {
        this.context = pContext;
        initialize(intent);
        showProcessNotification();
        uploadImagesToServer();
    }

    private void initialize(Intent intent)
    {
       //initialize data
    }

    private void uploadImagesToServer()
    {
        // do async task and close itself
        if(nm!=null)
        {
            nm.cancel(NOTIFICATION_ID);
        }
    }

    public void showProcessNotification()
    {
        try{

            notification = new NotificationCompat.Builder(context);
            notification.setAutoCancel(true);
            notification.setSmallIcon(R.mipmap.ic_launcher);
            notification.setWhen(System.currentTimeMillis());
            notification.setTicker("Uploading image(s)...");
            notification.setContentTitle(context.getResources().getString(R.string.app_name));
            notification.setContentTitle("Uploading image(s)...");
            notification.setAutoCancel(true);
            notification.setOngoing(true);
            notification.setDefaults(Notification.FLAG_ONGOING_EVENT);
            nm = (NotificationManager)context.getApplicationContext().getSystemService(context.getApplicationContext().NOTIFICATION_SERVICE);
            nm.notify(NOTIFICATION_ID,notification.build());
        }
        catch (Exception e)
        {

        }


    }


    public void uploadImages(Context context,Intent intent)
    {
        onReceive(context,intent);
    } 
}

Вот как я запускаю уведомление, используя приемник в действии

//inside a click listener
GalleryImageUploadReceiver receiver = new GalleryImageUploadReceiver();
receiver.uploadImages(getBaseContext(),intent);

Проблема с этим кодом заключается в том, что когда я нажимаю кнопку, новое уведомление переопределяет существующее, и поэтому на экране отображается только одно уведомление. Независимо от того, сколько раз я нажимаю на нее. Например, если уведомление длится 5 секунд, когда я снова нажимаю кнопку через 2 секунды после запуска первого, существующее будет длиться 7 секунд. Новый не добавляется в панель уведомлений. Как я могу сделать так, чтобы он добавлялся как новый при каждом нажатии кнопки.




Ответы (1)


Используйте уникальный идентификатор уведомления для каждого уведомления. Поскольку вы используете константу «NOTIFICATION_ID», новые уведомления переопределяют существующие.

person GPuschka    schedule 23.06.2016
comment
Большое спасибо. Идеально. - person Wai Yan Hein; 24.06.2016