Notifications

摘自 Google material design 文档

在您的应用程序里,使用 Notifications 告知你的 APP 用户一些相关和及时的信息。很多场景下,你都可以创建 notifications 来吸引注意,如朋友发来信息,交通状况不好的时候提醒通勤状况,安装应用完成的时候展示一个进度条等。

如何添加?

I. 在你的 build.gradle 文件里添加最新的 appcompat 库。

dependencies {  
    compile 'com.android.support:appcompat-v7:X.X.X' 
    // X.X.X specify the version
}

II. 获取一个 NotificationCompat.Builder 实例。

NotificationCompat.Builder builder = new NotificationCompat.Builder(context);  

III. 使用 Notification.Builder 创建一个 Notification

Notification notification = builder  
    .setContentTitle("Title")
    .setContentText("This is a notification!")
.setSmallIcon(R.drawable.ic_notifications_white_small)
    .build();

IV. 使用 NotificationManagerCompatnotify 方法展示你设置了 id 的那个 Notification

NotificationManagerCompat notificationManager =  
    NotificationManagerCompat.from(context);

notificationManager.notify(0x1234, notification);  

注: 为了显示通知,标题、文字、小图标是强制性必须要设置的。

如何设置样式?

在你的 notification 里使用 NotificationCompat.BuildersetColor(int color) 方法给圆形背景设置颜色。

Notification notification =  
    new NotificationCompat.Builder(context)
        .setContentTitle("Title")
        .setContentText("This is a notification!")
        .setSmallIcon(R.drawable.ic_bell)
        .setColor(Color.parseColor("#4B8A08"))
        .build();

包含图片的通知

使用 NotificationCompat.BuildersetLargeIcon(Bitmap) 方法给通知的设置小图标旁边的大图标。

Notification notification =  
    new NotificationCompat.Builder(context)
        .setContentTitle("Title")
        .setContentText("This is a notification!")
        .setSmallIcon(R.drawable.ic_bell)
        .setLargeIcon(profileImageBitmap) // Bitmap
        .setColor(Color.parseColor("#4B8A08"))
        .build();

振动通知

使用 NotificationCompat.BuildersetVibrate 方法设置一个带有振动模式的通知。

long[] vibratePattern = new long[] {  
   millisToWait, millisToVibrate, 
   millisToWait, millisToVibrate
}

Notification notification =  
    new NotificationCompat.Builder(context)
        .setContentTitle("Title")
        .setContentText("This is a notification!")
        .setSmallIcon(R.drawable.ic_bell)
        .setVibrate(vibratePattern)
        .build();

*注:*为了能够使用振动,你需要在 AndroidManifest.xml 里声明 android.permission.VIBRATE 权限。

带呼吸灯的通知

使用 NotificationCompat.BuildersetLights(int argb, int msOn, int msOff) 方法定制设备要显示的呼吸灯的颜色和 LED 模式。

Notification notification =  
   new NotificationCompat.Builder(context)
      .setContentTitle("Title")
      .setContentText("This is a notification!")
      .setSmallIcon(R.drawable.ic_bell)
      .setLights(Color.MAGENTA, onMillis, offMillis)
      .build();

提示和最佳实践

I. 专门针对时间敏感的用户进行通知。
II. 对于另外一个人发的通知,要包含他的图片。
III. 当用户点击一个通知的时候,允许用户直接进行操作。这可能会打一个详情视图,如一条信息,或者多个通知的摘要视图。
IV. 当没有使用 setLargeIcon 方法,而使用了 setSmallIcon 方法,默认情况下,使用圆形图片。当使用了 setLargeIcon 方法时,要用圆形图片时则要手动设置,

兼容性问题

Holo(4.x) 和 Material 版本上,通知风格不同。另外,像 tint 这样的特性也不支持(Holo)。

Holo Material

原文作者:Saúl Díaz González 翻译:Ailurus

Ailurus

Android Developer.