Notification not Showing from Service

Zain Ul Abidin :

I searched many other questions related to this topic but found not satisfactory answer also none of them are working for me. I want to show a continuous notification which should only be terminated by app. But the code i wrote was working a few days ago but not now.

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

There is no exception recorded in Logcat, regarding ths. The code is called in onCreate of service. The service is starting correctly i can see in Log cat also there is no exception but notification is not shown. My OS is Android ONE for nokia (PI)

Zain :

You are using a deprecated NotificationCompat.Builder constructor which takes a single argument (context); and that won't work on starting from Android 8.0 (API level 26).

So, to solve this:

Step 1: Create a Notification channel with the 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);
}

Note: changeargument values as you wish

Step 2:: Use the non-deprecated Notification.Builder class with its two-argument constructor that takes a second argument as the channel ID which you assigned in the first step, where I set it to "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);

Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=340931&siteId=1