zoukankan      html  css  js  c++  java
  • How to create a notification with NotificationCompat.Builder?AAAA

    I need to create a simple notification which will be shown in notification bar along with the sound and icon if possible? I also need it to be compatitible with Android 2.2, so i found that NotificationCompat.Builder works with all APIs above 4. If there's a better solution, feel free to mention it.

    up vote 118 down vote accepted

    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());
    
    • 1
      Will it automatically show in notification bar? And how do i add sound? – Vladimir Dec 16 '12 at 14:43
    • 1
      i tried this, but the application crashes. Any ideas? – Vladimir Dec 16 '12 at 15:24
    •  
    • 1
      the problem is with this NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); notificationManager.notify(mId, mBuilder.build()); – Vladimir Dec 22 '12 at 15:09
    • 3
      @Herrmann what is mId in notify method? – Dinesh T A Apr 12 '13 at 5:50
    • 2
      Thank you for You have to set at least smallIcon, contentTitle and contentText. If you miss one the Notification will not show. That line solved my headache. Didn't realize you HAD to set all of those. – zgc7009 Jun 10 '14 at 14:37

    Working example:

        Intent intent = new Intent(ctx, HomeActivity.class);
        PendingIntent contentIntent = PendingIntent.getActivity(ctx, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
    
        NotificationCompat.Builder b = new NotificationCompat.Builder(ctx);
    
        b.setAutoCancel(true)
         .setDefaults(Notification.DEFAULT_ALL)
         .setWhen(System.currentTimeMillis())         
         .setSmallIcon(R.drawable.ic_launcher)
         .setTicker("Hearty365")            
         .setContentTitle("Default notification")
         .setContentText("Lorem ipsum dolor sit amet, consectetur adipiscing elit.")
         .setDefaults(Notification.DEFAULT_LIGHTS| Notification.DEFAULT_SOUND)
         .setContentIntent(contentIntent)
         .setContentInfo("Info");
    
    
        NotificationManager notificationManager = (NotificationManager) ctx.getSystemService(Context.NOTIFICATION_SERVICE);
        notificationManager.notify(1, b.build());
    
    • 1
      Hi, I've tried this code but I don't have any references to NotificationCompat.Builder... is it something missing? – nhenrique Feb 19 '15 at 16:31
    • 1
      Check to make sure you included the android support-v4 compatibility library. You might also try to clean and rebuild your project. – Jimmy Ilenloa May 26 '15 at 9:40
    • 1
      I have a problem i set the icon have green colour but when notification appear it changes to white automatically. – HUSNAIN SARWAR Jul 21 '16 at 6:56
    • 2
      @HUSNAINSARWAR because that happens on the API >21 (Lollipop and above). To resolve that please specify an icon for setSmallIcon(R.id.your_icon_small) and set a main icon like this mBuilder.setLargeIcon(BitmapFactory .decodeResource(context.getResources(), R.drawable.icon)) for API >21. – sud007 Jan 12 '17 at 6:22
    •  
    •  
      This will not work when you want to show it at android 8 and when the app is opened – Ultimo_m Aug 2 at 16:20

    I make this method and work fine. (tested in android 6.0.1)

    public void notifyThis(String title, String message) {
        NotificationCompat.Builder b = new NotificationCompat.Builder(this.context);
        b.setAutoCancel(true)
                .setDefaults(NotificationCompat.DEFAULT_ALL)
                .setWhen(System.currentTimeMillis())
                .setSmallIcon(R.drawable.favicon32)
                .setTicker("{your tiny message}")
                .setContentTitle(title)
                .setContentText(message)
                .setContentInfo("INFO");
    
        NotificationManager nm = (NotificationManager) this.context.getSystemService(Context.NOTIFICATION_SERVICE);
        nm.notify(1, b.build());
    }
    

    Notification in depth

    CODE

    Intent intent = new Intent(this, SecondActivity.class);
    PendingIntent pendingIntent = PendingIntent.getActivity(this,0,intent,0);
    
    NotificationCompat.Builder mBuilder =
                    new NotificationCompat.Builder(context)
                            .setSmallIcon(R.drawable.your_notification_icon)
                            .setContentTitle("Notification Title")
                            .setContentText("Notification ")
                            .setContentIntent(pendingIntent );
    
    NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
    notificationManager.notify(0, mBuilder.build());
    

    Depth knowledge

    Notification can be build using Notification. Builder or NotificationCompat.Builder classes.
    But if you want backward compatibility you should use NotificationCompat.Builder class as it is part of v4 Support library as it takes care of heavy lifting for providing consistent look and functionalities of Notification for API 4 and above.

    Core Notification Properties

    A notification has 4 core properties (3 Basic display properties + 1 click action property)

    • Small icon
    • Title
    • Text
    • Button click event (Click event when you tap the notification )

    Button click event is made optional on Android 3.0 and above. It means that you can build your notification using only display properties if your minSdk targets Android 3.0 or above. But if you want your notification to run on older devices than Android 3.0 then you must provide Click event otherwise you will see IllegalArgumentException.

    Notification Display

    Notification are displayed by calling notify() method of NotificationManger class

    notify() parameters

    There are two variants available for notify method

    notify(String tag, int id, Notification notification)
    

    or

    notify(int id, Notification notification)
    

    notify method takes an integer id to uniquely identify your notification. However, you can also provide an optional String tag for further identification of your notification in case of conflict.

    This type of conflict is rare but say, you have created some library and other developers are using your library. Now they create their own notification and somehow your notification and other dev's notification id is same then you will face conflict.

    Notification after API 11 (More control)

    API 11 provides additional control on Notification behavior

    • Notification Dismissal
      By default, if a user taps on notification then it performs the assigned click event but it does not clear away the notification. If you want your notification to get cleared when then you should add this

      mBuilder.setAutoClear(true);

    • Prevent user from dismissing notification
      A user may also dismiss the notification by swiping it. You can disable this default behavior by adding this while building your notification

      mBuilder.setOngoing(true);

    • Positioning of notification
      You can set the relative priority to your notification by

      mBuilder.setOngoing(int pri);

    If your app runs on lower API than 11 then your notification will work without above mentioned additional features. This is the advantage to choosing NotificationCompat.Builder over Notification.Builder

    Notification after API 16 (More informative)

    With the introduction of API 16, notifications were given so many new features
    Notification can be so much more informative.
    You can add a bigPicture to your logo. Say you get a message from a person now with the mBuilder.setLargeIcon(Bitmap bitmap) you can show that person's photo. So in the statusbar you will see the icon when you scroll you will see the person photo in place of the icon. There are other features too

    • Add a counter in the notification
    • Ticker message when you see the notification for the first time
    • Expandable notification
    • Multiline notification and so on

    You can try this code this works fine for me:

        NotificationCompat.Builder mBuilder= new NotificationCompat.Builder(this);
    
        Intent i = new Intent(noti.this, Xyz_activtiy.class);
        PendingIntent pendingIntent= PendingIntent.getActivity(this,0,i,0);
    
        mBuilder.setAutoCancel(true);
        mBuilder.setDefaults(NotificationCompat.DEFAULT_ALL);
        mBuilder.setWhen(20000);
        mBuilder.setTicker("Ticker");
        mBuilder.setContentInfo("Info");
        mBuilder.setContentIntent(pendingIntent);
        mBuilder.setSmallIcon(R.drawable.home);
        mBuilder.setContentTitle("New notification title");
        mBuilder.setContentText("Notification text");
        mBuilder.setSound(RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION));
    
        NotificationManager notificationManager= (NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE);
        notificationManager.notify(2,mBuilder.build());
    

    simple way for make notifications

     NotificationCompat.Builder builder = (NotificationCompat.Builder) new NotificationCompat.Builder(this)
                .setSmallIcon(R.mipmap.ic_launcher) //icon
                .setContentTitle("Test") //tittle
                .setAutoCancel(true)//swipe for delete
                .setContentText("Hello Hello"); //content
        NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
    
        notificationManager.notify(1, builder.build()
        );
    

    Use this code

                Intent intent = new Intent(getApplicationContext(), SomeActvity.class);
                PendingIntent pIntent = PendingIntent.getActivity(getApplicationContext(),
                        (int) System.currentTimeMillis(), intent, 0);
    
                NotificationCompat.Builder mBuilder =
                        new NotificationCompat.Builder(getApplicationContext())
                                .setSmallIcon(R.drawable.your_notification_icon)
                                .setContentTitle("Notification title")
                                .setContentText("Notification message!")
                                .setContentIntent(pIntent);
    
                NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
                notificationManager.notify(0, mBuilder.build());
    
    shareimprove this answer
     
    https://stackoverflow.com/questions/13902115/how-to-create-a-notification-with-notificationcompat-builder
  • 相关阅读:
    IntelliJ IDEA java项目导入jar包,打jar包
    intelliJ idea运行新的test功能时,报错:class not found "....." empty test suite
    WEBSERVICE之JDK开发webservice
    Linux uname 命令 打印系统信息
    IDEA中 @override报错的解决方法
    使用VMware搭建3台一模一样的Linux虚拟机
    java使用httpclient封装post请求和get的请求
    在Centos中yum安装和卸载软件的使用方法
    JAVA面试题:69道Spring面试题和答案
    JAVA面试题:equals()方法和== 区别
  • 原文地址:https://www.cnblogs.com/pengmn/p/10118597.html
Copyright © 2011-2022 走看看