Уведомление не отображается из сервиса - PullRequest
0 голосов
/ 21 марта 2020

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

private void GenNotification(String title, String body)
    {
        try
        {
            Log.i(Config.TAGWorker, "Generating Notification . . .");
            Intent myIntent = new Intent(this, MainActivity.class);
            PendingIntent pendingIntent = PendingIntent.getActivity(
                    this,
                    0,
                    myIntent,
                    PendingIntent.FLAG_UPDATE_CURRENT);

            Notification notification = new NotificationCompat.Builder(this)
                    .setContentTitle(title)
                    .setContentText(body)
                    .setChannelId("myID")
                    .setTicker("Notification!")
                    .setWhen(System.currentTimeMillis())
                    .setContentIntent(pendingIntent)
                    .setDefaults(Notification.DEFAULT_SOUND)
                    .setAutoCancel(false)
                    .setSmallIcon(R.drawable.floppy)
                    .setOngoing(true)
                    .build();
            NotificationManager mNotificationManager = (NotificationManager) getSystemService(Service.NOTIFICATION_SERVICE);
            mNotificationManager.notify(1, notification);
        }
        catch (Exception e)
        {
            Log.e(Config.TAGWorker, e.getMessage());
        }
    }

Нет никаких исключений, зарегистрированных в Logcat, относительно этого. Код вызывается в onCreate сервиса. Служба запускается правильно, я вижу в журнале Cat также нет исключений, но уведомление не отображается. Моя ОС Android ОДНА для Nokia (PI)

Ответы [ 2 ]

1 голос
/ 21 марта 2020

Вы используете устаревший конструктор NotificationCompat.Builder, который принимает один аргумент (контекст); и это не сработает при запуске с Android 8.0 (уровень API 26).

Итак, чтобы решить это:

Шаг 1: Создать Канал уведомлений с NotificationManager

NotificationManager mNotificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);

// Notification channels are only available in OREO and higher.
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.O) {

    NotificationChannel notificationChannel = new NotificationChannel
            ("PRIMARY_CHANNEL_ID",
                    "Service",
                    NotificationManager.IMPORTANCE_HIGH);

    notificationChannel.enableLights(true);
    notificationChannel.setLightColor(Color.RED);
    notificationChannel.enableVibration(true);
    notificationChannel.setDescription("Description");

    mNotificationManager.createNotificationChannel(notificationChannel);
}

Примечание: значения аргумента изменяются по мере того, как вы sh

Шаг 2: : использовать не устарел Notification.Builder класс с его конструктором с двумя аргументами, который принимает второй аргумент в качестве идентификатора канала, который вы присвоили на первом шаге, где я установил для него «PRIMARY_CHANNEL_ID»

Notification notification = new NotificationCompat.Builder
        (this, "PRIMARY_CHANNEL_ID")
        .setContentTitle("title")
        .setContentText("body")
        .setTicker("Notification!")
        .setWhen(System.currentTimeMillis())
        .setContentIntent(pendingIntent)
        .setSmallIcon(R.drawable.ic_launcher_background)
        .setPriority(NotificationCompat.PRIORITY_HIGH)
        .setOngoing(true)
        .setDefaults(NotificationCompat.DEFAULT_ALL)
        .setAutoCancel(true)
        .build();

mNotificationManager.notify(0, notification);
0 голосов
/ 21 марта 2020

Проверяли ли вы, что ваши строки (заголовок и тело) не равны NULL, если уведомление не будет отображаться? Также убедитесь, что вы вызываете каналы уведомлений при каждом запуске службы, если ваш android выше 7,0. Очистите уведомление при его вызове. тот же идентификатор в вашем случае равен 1.

...