使用NotificationCompat获得好看的通知 (Android Development Patterns S1 Ep 2)

前言

Android Development Patterns 第一季第二期,Using NotificationCompat for Beautiful Notifications。
使用NotificationCompat可以在任意API的设备上获得统一的通知体验,并且支持Android Wear 和 Android Auto。

Build a notification


使用NotificationCompat创建和推送通知时,必须包含以下内容:

  • 小图标,由 setSmallIcon() 设置
  • 标题,由 setContentTitle() 设置
  • 详细文本,由 setContentText() 设置

所有其他通知设置和内容都是可选的。
但是只设置了这些,那么它只是一个单纯的通知,点击通知也不会出发任何操作,所以强烈建议通过setContentIntent()来设置通知的点击操作。
通过以下代码,那么一个简单的通知就已经创建好了:

    PendingIntent notificationIntent= PendingIntent.getActivity(...);

    NotificationCompat.Builder builder = new NotificationCompat.Builder(this)
            .setSmallIcon(R.mipmap.ic_launcher)
            .setContentTitle("Journey")
            .setContentText("....")
            .setContentIntent(notificationIntent)

    Notification notification = builder.build();
    NotificationManagerCompat.from(this).notify(0, notification);

这里写图片描述

Make it recognizable


我们还能对通知做许多改变,例如把通知的颜色设置的和你应用的颜色相同,然后再添加一个largeIcon,这样会使得你的通知辨识度更高。

Bitmap bitmap = BitmapFactory.decodeResource(getResources(), R.drawable.profile_picture);

builder.setColor(getResources().getColor(R.color.colorAccent))
builder.setLargeIcon(bitmap)

注意:只有API21+的设备才能设置颜色,在MIUI系统中,这两个属性都是不生效的。

这里写图片描述

Notification Styles


在API16以上的设备上,通知栏能够展开,给予你除了标题和一行内容之外更多的展示内容。
再通知被展开时,NotificationCompat提供了4种Style供开发者使用:

  • BigTextStyle:用来显示多行文本
  • InBoxStyle:用来显示一系列单行文本(邮件通知格式)
  • BigPictureStyle:在通知中显示一张大图
  • MediaStyle:直接在通知里添加媒体控制器

    使用NotificationCompat获得好看的通知 (Android Development Patterns S1 Ep 2)_第1张图片

    不过我发现在NotificationCompat中其实并没有MediaStyle,反而多了一个MessagingStyle。

    使用NotificationCompat获得好看的通知 (Android Development Patterns S1 Ep 2)_第2张图片

    后来发现MediaStyle不在NotificationCompat中,而是在Notification中:

    使用NotificationCompat获得好看的通知 (Android Development Patterns S1 Ep 2)_第3张图片

    而这个MessagingStyle则是API24+才能使用,效果如图:

    使用NotificationCompat获得好看的通知 (Android Development Patterns S1 Ep 2)_第4张图片

        builder.setStyle(new NotificationCompat.MessagingStyle("Journey")
                    .addMessage("Sister,sister,where are you?", 2000, "Rem")
                    .addMessage("I'm here Rem", 1100, "Ram")
                    .addMessage("Sister,sister,there's a fool, don't touch him", 100, "Rem"));
    

Expanding our notification


我们还能在通知里面添加一些重要的操作:

builder.addAction(new NotificationCompat.Action(R.drawable.ic_not_interested_black_24dp,"Mute",notificationIntent))

使用NotificationCompat获得好看的通知 (Android Development Patterns S1 Ep 2)_第5张图片

注意: API24对通知进行了重新设计,这里放出简单的对比。
图左:API21~23,图右:API24.


Build Better Apps

接下来还讲了供Android Wear 和Android Auto使用的WearableExtender和CarExtender,由于暂时还接触不到这一块的开发就不做介绍了。

所以通过NotificationCompat,我们能过通过一个API,来控制各个版本的Android设备的通知。

还支持渐进增强,能够通过添加格式和操作,甚至是工具箱,来拓展你的通知。

赶快使用NotificationCompat来构建一个优雅的通知吧,你所要做的只是添加V4支持包就够啦。

你可能感兴趣的:(Android,Development,Patterns)