Android发送通知——通知栏(Notification)
通知是指 Android 在您应用的界面之外显示的消息,旨在向用户提供提醒、来自他人的通信信息或您应用中的其他实时信息。在发出一条通知后,手机最上方的状态栏会显示一个通知的图标,下拉状态栏后就可以看到通知的详细内容。用户可以点按通知来打开应用,或直接从通知中执行操作。
通知格式
- 小图标:必须提供,通过 setSmallIcon() 进行设置。
- 应用名称:由系统提供。
- 时间戳:由系统提供,但您可以使用 setWhen() 替换它或者使用 setShowWhen(false) 隐藏它。
- 大图标:可选内容(通常仅用于联系人照片,请勿将其用于应用图标),通过 setLargeIcon() 进行设置。
- 标题:可选内容,通过 setContentTitle() 进行设置。
- 文本:可选内容,通过 setContentText() 进行设置。
创建通知
- 创建一个通知(必须设置channelId)
使用Builder构造器来创建Notification对象
Context context=getApplicationContext();
String channelId = "测试渠道";
Notification notification = new Notification.Builder(context,channelId).setContentTitle("测试通知标题").setContentText("测试通知文本").setWhen(System.currentTimeMillis()).setSmallIcon(R.drawable.icon).setLargeIcon(BitmapFactory.decodeResource(getResources(),R.drawable.welcome1)) //设置大图标.build();
Notificationt.Builder常用设置:
设置属性 | 说明 |
---|---|
setAutoCancel(boolean autocancel) | 设置点击信息后自动清除通知 |
setContent(RemoteView view) | 设置自定义通知 |
setContentTitle(String string) | 设置标题 |
setContentText(String string) | 设置内容 |
SetContentIntent(PendingIntent intent) | 设置点击信息后的跳转(意图) |
setWhen(long when) | 设置时间 |
setSmallIcon() | 设置小图标 |
setLargeIcon() | 设置大图标 |
setPriority(int pri) | 设置通知的重要程度 |
setStyle(Style style) | 设置样式 |
setVisibility(int visibility) | 设置锁屏显示 |
setDefault(int defaults) | 设置默认 |
- 获取系统的通知管理器
NotificationManager notificationManager = (NotificationManager)context.getSystemService(NOTIFICATION_SERVICE);
- 创建NotificationChannel(这里传入的channelId要和创建的通知channelId一致,才能为指定通知建立通知渠道)
NotificationChannel channel = new NotificationChannel(channelId,"测试渠道名称", NotificationManager.IMPORTANCE_DEFAULT);
notificationManager.createNotificationChannel(channel);
通知渠道是指每条通知都要属于一个对应的渠道,每个APP可以自由地创建当前APP拥有哪些通知渠道,但是这些通知渠道的控制权都是掌握在用户手上的。用户可以自由地选择这些通知渠道的重要程度、是否响铃、是否震动或者是否关闭这个渠道的通知。
通知渠道的使用:Android O(8.0)Notification Channel使用姿势、NotificationChannel使用手册
- 发送通知
notificationManager.notify(1123, notification);
通知样式
Android为开发者提供了不同种类的通知样式模板可以使用,开发者也可以根据自己需要自定义通知样式。
本来是打算自己看手册总结一下的,有个大神总结得很到位:Android 8.0中各种通知写法汇总。
以大图样式为例:
// 1. 创建一个通知(必须设置channelId)
Notification.BigPictureStyle bigPictureStyle = new Notification.BigPictureStyle().setBigContentTitle("Big picture style notification ~ Expand title").setSummaryText("Demo for big picture style notification ! ~ Expand summery").bigPicture(BitmapFactory.decodeResource(context.getResources(),R.drawable.welcome3));
Notification notification = new Notification.Builder(context,channelId).setContentTitle("测试通知标题").setContentText("测试通知文本").setWhen(System.currentTimeMillis()).setSmallIcon(R.drawable.icon).setLargeIcon(BitmapFactory.decodeResource(getResources(),R.drawable.welcome1)) //设置大图标.setStyle(bigPictureStyle).build();
// 2. 获取系统的通知管理器
NotificationManager notificationManager = (NotificationManager)context.getSystemService(NOTIFICATION_SERVICE);
// 3. 创建NotificationChannel(这里传入的channelId要和创建的通知channelId一致,才能为指定通知建立通知渠道)
NotificationChannel channel = new NotificationChannel(channelId,"测试渠道名称", NotificationManager.IMPORTANCE_DEFAULT);
notificationManager.createNotificationChannel(channel);
// 4. 发送通知
notificationManager.notify(1123, notification);
展开前:
展开后: