如何创建与NotificationCompat.Builder通知?(How to create a

2019-07-05 12:00发布

我需要创建一个简单的通知,将在通知栏用声音和图标,如果可以一起显示来? 我还需要它compatitible与Android 2.2,所以我发现,NotificationCompat.Builder适用于所有的API上述4.如果有一个更好的解决方案,可随时提。

Answer 1:

该NotificationCompat.Builder是创建最简单的方式Notifications所有的Android版本。 你甚至可以使用可用的Android 4.1功能。 如果您的应用程序与Android设备上运行> = 4.1的新功能将被使用,如果运行在Android <4.1的通知将是一个简单的老的通知。

要创建一个简单的通知只是(见的通知的Android API指南 ):

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

你必须设置至少smallIconcontentTitlecontentText 。 如果你错过了一个通知将不会显示。

当心:在姜饼及以下,你必须设置内容的意图,否则IllegalArgumentException将被抛出。

要创建一个什么也不做的目的,使用方法:

final Intent emptyIntent = new Intent();
PendingIntent pendingIntent = PendingIntent.getActivity(ctx, NOT_USED, emptyIntent, PendingIntent.FLAG_UPDATE_CURRENT);

你可以通过参数中加入声音,即从RingtoneManager一个声音:

mBuilder.setSound(RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION))

该通知被加入到通过NotificationManager吧:

NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.notify(mId, mBuilder.build());


Answer 2:

工作示例:

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


Answer 3:

我有这样的方法,做工精细。 (在机器人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());
}


Answer 4:

通知在深度

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

深入了解

通知可以用建立通知。 Builder或NotificationCompat.Builder类。
但是如果你想向后兼容性,你应该使用NotificationCompat.Builder类,因为它是V4支持库的一部分,因为它负责繁重的工作提供一致的外观和通知功能的API 4及以上。

核心通知属性

通知有4种芯性能(3个基本显示属性+ 1次点击动作特性)

  • 小图标
  • 标题
  • 文本
  • 按钮单击事件(当您点击通知Click事件)

按钮单击事件是由可选在Android 3.0及以上。 这意味着,你可以,如果你的目标minSdk的Android 3.0或以上版本仅使用显示属性建立您的通知。 但是,如果你希望你的通知上比Android 3.0较旧的设备上运行,那么你必须提供点击事件,否则你将看到IllegalArgumentException异常。

通知显示

通知是通过调用通知()NotificationManger类的方法显示

通知()参数

有可用的通知方法两种变体

notify(String tag, int id, Notification notification)

要么

notify(int id, Notification notification)

通知方法接受一个整数ID来唯一地标识您的通知。 但是,您也可以在冲突的情况下,您的通知中进一步识别提供了一个可选的字符串标签。

这种类型的冲突是罕见的,但说,你已经创造了一些图书馆和其他开发人员使用您的图书馆。 现在,他们创建自己的通知,不知怎么的通知和其他开发人员的通知ID是相同的,那么你将面临冲突。

API 11(更对照)后通知

API 11提供的通知行为的其他控制

  • 通知解雇
    默认情况下,如果用户点击通知,然后进行分配click事件,但它不清除的通知。 如果你希望你的通知,即可清除时就应该添加这个

    mBuilder.setAutoClear(真);

  • 辞退通知防止用户
    用户还可以通过滑动它关闭通知。 您可以通过添加此同时建立您的通知禁用此默认行为

    mBuilder.setOngoing(真);

  • 通知定位
    您可以通过相对优先级设为您的通知

    mBuilder.setOngoing(INT PRI);

如果您的应用程序在较低API的运行速度比11那么您的通知将工作没有上述附加功能。 这是优势选择NotificationCompat.Builder超过Notification.Builder

API 16后通知(更多的信息)

通过引入API 16,通知被赋予这么多的新功能
通知可以被这么多信息。
您可以添加到bigPicture您的标志。 假设你从一个人的消息,现在与mBuilder.setLargeIcon(位图位图)你能证明人的照片。 因此,在状态栏,你会看到图标滚动时,你会看到在地方的图标的人的照片。 还有其他一些特点

  • 添加计数器通知
  • 当你看到的第一次通知北京时间消息
  • 可扩展的通知
  • 多行通知等


Answer 5:

你可以试试这个代码能正常工作对我来说:

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


Answer 6:

为补充通知简单的方法

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


Answer 7:

显示Notificaton在安卓8.0

@TargetApi(Build.VERSION_CODES.O)
@RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN)

  public void show_Notification(){

    Intent intent=new Intent(getApplicationContext(),MainActivity.class);
    String CHANNEL_ID="MYCHANNEL";
    NotificationChannel notificationChannel=new NotificationChannel(CHANNEL_ID,"name",NotificationManager.IMPORTANCE_LOW);
    PendingIntent pendingIntent=PendingIntent.getActivity(getApplicationContext(),1,intent,0);
    Notification notification=new Notification.Builder(getApplicationContext(),CHANNEL_ID)
            .setContentText("Heading")
            .setContentTitle("subheading")
            .setContentIntent(pendingIntent)
            .addAction(android.R.drawable.sym_action_chat,"Title",pendingIntent)
            .setChannelId(CHANNEL_ID)
            .setSmallIcon(android.R.drawable.sym_action_chat)
            .build();

    NotificationManager notificationManager=(NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
        notificationManager.createNotificationChannel(notificationChannel);
    notificationManager.notify(1,notification);


}


Answer 8:

使用此代码。

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


文章来源: How to create a notification with NotificationCompat.Builder?