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

Ниже приведен фрагмент кода в моем классе обслуживания. Если пользователь «присоединяется к команде» (операция = 0) , то он создает уведомление со своими назначенными спецификациями, однако, если пользователь сообщает свое местоположение (операция = 1) , то он должен создать отдельное уведомление переднего плана. Вместо этого одно просто заменяет другое. Я не знаю почему, у них разные ID, просто один и тот же канал. Я также пытался отделить их ID канала, но та же проблема

int id = NOTIFICATION_LOCATION;
        int icon = R.drawable.ic_gps_on;
        String message = "Tap to disable location updates";

        if (operation == 0) {
            id = NOTIFICATION_RESPONDER;
            icon = R.drawable.ic_responder_icon;
            message = "Tap to leave the responding team";
        }

        Notification notification = new NotificationCompat.Builder(this, CHANNEL_ID_1)
                .setSmallIcon(icon)
                .setContentTitle("Location established")
                .setContentText(message)
                .setContentIntent(PendingIntent.getBroadcast(getApplicationContext(), 0, getBroadcastIntent(operation), PendingIntent.FLAG_UPDATE_CURRENT))
                .setColor(ContextCompat.getColor(getApplicationContext(), R.color.primaryColor))
                .setDefaults(Notification.DEFAULT_SOUND)
                .setVisibility(VISIBILITY_PUBLIC)
                .build();

        startForeground(id, notification);

1 Ответ

1 голос
/ 22 февраля 2020

Уведомление, которым вы манипулируете с помощью startForeground(), должно быть тем «официальным» уведомлением, которое соответствует службе переднего плана; тот, который Android настаивает на том, что у вас есть все время, когда служба запущена.

Меня не удивляет, что если вы предоставите другой идентификатор канала уведомлений при последующем вызове startForeground(), это удаляет , а заменяет исходное уведомление. В противном случае вы можете получить несколько уведомлений переднего плана для одной службы, и все может запутаться.

Вместо этого просто используйте NotificationManager.notify() для управления любыми уведомлениями, которые появляются сверх исходной службы переднего плана. уведомление. Используйте отдельные идентификаторы для этих дополнительных уведомлений.

Хорошей практикой является использование фиксированного идентификатора для уведомления об услуге переднего плана. Вы все еще можете изменить Notification по желанию; просто проще вспомнить, какой Notification является вашим "официальным", если у вас есть фиксированный идентификатор.

Вы также можете манипулировать своим "официальным уведомлением службы переднего плана", используя notify(); вам не нужно использовать startForeground(). Вызов startForeground() необходим только один раз , в начале, чтобы связать услугу с указанным c идентификатором уведомления.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...