How to create a notification with NotificationCompat.Builder?
The NotificationCompat.Builder is the most easy way to create Notifications
on all Android versions. You can even use features that are available with Android 4.1. If your app runs on devices with Android >=4.1 the new features will be used, if run on Android <4.1 the notification will be an simple old notification.
To create a simple Notification just do (see Android API Guide on Notifications):
NotificationCompat.Builder mBuilder =
new NotificationCompat.Builder(this)
.setSmallIcon(R.drawable.notification_icon)
.setContentTitle("My notification")
.setContentText("Hello World!")
.setContentIntent(pendingIntent); //Required on Gingerbread and below
You have to set at least smallIcon
, contentTitle
and contentText
. If you miss one the Notification will not show.
Beware: On Gingerbread and below you have to set the content intent, otherwise a IllegalArgumentException
will be thrown.
To create an intent that does nothing, use:
final Intent emptyIntent = new Intent();
PendingIntent pendingIntent = PendingIntent.getActivity(ctx, NOT_USED, emptyIntent, PendingIntent.FLAG_UPDATE_CURRENT);
You can add sound through the builder, i.e. a sound from the RingtoneManager:
mBuilder.setSound(RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION))
The Notification is added to the bar through the NotificationManager:
NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.notify(mId, mBuilder.build());
How to make it work NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this, NOTIFICATION_CHANNEL_ID);
Try to use this, I think your problem is here: details.useVersion '25.3.0'
configurations.all {
resolutionStrategy.eachDependency { DependencyResolveDetails details ->
def requested = details.requested
if (requested.group == 'com.android.support') {
if (!requested.name.startsWith("multidex")) {
details.useVersion '27.1.0'
}
}
}
}
Android - How to create a Notification with Action
Use the NotificationCompat instead of Notification like this:
Notification.Action action = new NotificationCompat.Action(icon, title, pendingIntent);
Notification notification = new NotificationCompat.Builder(context)
.addAction(action)
.build();
NotificationCompat.Builder deprecated in Android O
It is mentioned in the documentation that the builder method NotificationCompat.Builder(Context context)
has been deprecated. And we have to use the constructor which has the channelId
parameter:
NotificationCompat.Builder(Context context, String channelId)
NotificationCompat.Builder Documentation:
This constructor was deprecated in API level 26.0.0-beta1. use
NotificationCompat.Builder(Context, String) instead. All posted
Notifications must specify a NotificationChannel Id.
Notification.Builder Documentation:
This constructor was deprecated in API level 26. use
Notification.Builder(Context, String) instead. All posted
Notifications must specify a NotificationChannel Id.
If you want to reuse the builder setters, you can create the builder with the channelId
, and pass that builder to a helper method and set your preferred settings in that method.
Notification Builder does not create the notification
Found out the answer.
My phone is Oreo. I had to use notification channels. The answers mentioned here worked perfectly fine on the emulator which had a lower version.
Used [GitHub] (https://github.com/tutsplus/android-o-how-to-use-notification-channels) for reference.
Thank you all for your answers.
How to create Notification.contentView in android Nougat and above?
Answer my own question:
Create contentView
by Notification.Builder
:
builder.createContentView();
Create contentView
by Notification
:
Notification.Builder.recoverBuilder(context, notification).createContentView();
Since Notification.Builder.createContentView()
was introduced in api level 24, so the above code can only be called from Nougat 7.0 or newer devices; For a lower version phones, it's always safe to reference non-null Notification.contentView directly, it's created automatically by the android system after builder.build() was called.
How exactly to use Notification.Builder
This is in API 11, so if you are developing for anything earlier than 3.0 you should continue to use the old API.
Update: the NotificationCompat.Builder class has been added to the Support Package so we can use this to support API level v4 and up:
http://developer.android.com/reference/android/support/v4/app/NotificationCompat.Builder.html
Notification not showing in Oreo
In Android O it's a must to use a channel with your Notification Builder
below is a sample code :
// Sets an ID for the notification, so it can be updated.
int notifyID = 1;
String CHANNEL_ID = "my_channel_01";// The id of the channel.
CharSequence name = getString(R.string.channel_name);// The user-visible name of the channel.
int importance = NotificationManager.IMPORTANCE_HIGH;
NotificationChannel mChannel = new NotificationChannel(CHANNEL_ID, name, importance);
// Create a notification and set the notification channel.
Notification notification = new Notification.Builder(MainActivity.this)
.setContentTitle("New Message")
.setContentText("You've received new messages.")
.setSmallIcon(R.drawable.ic_notify_status)
.setChannelId(CHANNEL_ID)
.build();
Or with Handling compatibility by:
NotificationCompat notification =
new NotificationCompat.Builder(this)
.setSmallIcon(R.drawable.notification_icon)
.setContentTitle("My notification")
.setContentText("Hello World!")
.setChannelId(CHANNEL_ID).build();
Now make it notify
NotificationManager mNotificationManager =
(NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
mNotificationManager.createNotificationChannel(mChannel);
// Issue the notification.
mNotificationManager.notify(notifyID , notification);
or if you want a simple fix then use the following code:
NotificationManager mNotificationManager =
(NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
mNotificationManager.createNotificationChannel(mChannel);
}
Updates:
NotificationCompat.Builder reference
NotificationCompat.Builder(Context context)
This constructor was deprecated in API level 26.0.0
so you should use
Builder(Context context, String channelId)
so no need to setChannelId
with the new constructor.
And you should use the latest of AppCompat library currently 26.0.2
compile "com.android.support:appcompat-v7:26.0.+"
Source from Android Developers Channel on Youtube
Also, you could check official Android Docs
Related Topics
How to Hide Status Bar in Android
Remove a Marker from a Googlemap
How to Get Access to Raw Resources That I Put in Res Folder
Twitter Integration on Android App
Accessing Sharedpreferences Through Static Methods
How to Save Hashmap to Shared Preferences
How to Change Package Name of Android Project in Eclipse
What Is the Relation Between App_Platform, Android:Minsdkversion and Android:Targetsdkversion
Datepicker Dialog Without Calendar Visualization in Lollipop [Spinner Mode]
Retrieving All Drawable Resources from Resources Object
Service Won't Stop When Stopservice Method Is Called
How to Start Fragment from an Activity
Android Permission.Interact_Across_Users_Full
Upgraded to Sdk 2.3 - Now No Emulators Have Connectivity
System Is Returning Error 127 When Called from C++ in Linux
Read_Logs Permission on Jelly Bean (API 16)
What Does Porterduff.Mode Mean in Android Graphics.What Does It Do