当前位置:   article > 正文

Android Notification通知 发送消息通知时的用法 兼容高低版本 demo下载_通知 setgroup

通知 setgroup

目录

 

前言

一、标准通知实现步骤

1.创建通知渠道,并设置重要性(这个8.0及以上必须需要设置的内容,才能提供通知)

2.设置点击通知跳转activity

3.创建通知,设置图标

4.显示通知

二、消息通知实现步骤(使用分组)

1.创建通知渠道,并设置重要性(这个8.0及以上必须需要设置的内容,才能提供通知)

2.设置点击通知跳转activity

3.创建通知组并为其添加通知

4.设置通知组摘要

5.设置通知图标icon

6.显示通知

总结及demo链接


前言

最近做了一个聊天功能,涉及到了收到消息要通知给用户的部分,需要写一个通知。发现通知我是太久没用了,我知道的实现方法已经不适用了。所以这几天通过Google文档整理了之后可能会常用到的2种情况下使用的通知使用方法:标准通知,消息通知(使用分组)。

也涉及到以下问题:android低版本到高版本手机的通知兼容问题,帮助用户打开通知开关,android5.x手机状态栏icon是白块问题。

条件:Android studio,minSdkVersion = 16,targetSdkVersion = 29

通知图片:需要多制作一个背景透明,内容白色填充的icon,做适配

一、标准通知实现步骤

1.创建通知渠道,并设置重要性(这个8.0及以上必须需要设置的内容,才能提供通知)

先创建一个NotificationChannel对象,然后放入notificationManager.createNotificationChannel的参数,注册应用的通知渠道。

设置重要性: int importance = NotificationManager.IMPORTANCE_DEFAULT; 用默认的就可以

  1. //步骤1:创建渠道 并 设置重要性(8.0及以上需要设置)
  2. if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
  3. CharSequence name = channel_name;//渠道名字
  4. String description = channel_description;//渠道描述(可以不设置)
  5. int importance = NotificationManager.IMPORTANCE_DEFAULT;//设置渠道重要性, 用默认的就刚好
  6. //1 创建NotificationChannel对象,并设置重要性
  7. NotificationChannel channel = new NotificationChannel(CHANNEL_ID, name, importance);
  8. channel.setDescription(description);
  9. //2 createNotificationChannel创建通知渠道
  10. NotificationManager notificationManager = mActivity.getSystemService(NotificationManager.class);
  11. notificationManager.createNotificationChannel(channel);
  12. }

2.设置点击通知跳转activity

需要创建一个PendingIntent对象,并设置跳转参数

  1. //步骤2:设置通知的点按操作(跳转的Intent)
  2. Intent intent = new Intent(mActivity, TwoActivity.class);
  3. PendingIntent pendingIntent = PendingIntent.getActivity(mActivity, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);//FLAG_UPDATE_CURRENT:表示已存在则直接使用

3.创建通知,设置图标

使用 NotificationCompat.Builder 对象设置通知内容和渠道。  setPriority() 设置优先级,这个也用默认的就可以。

  1. //步骤3:创建通知
  2. NotificationCompat.Builder builder = new NotificationCompat.Builder(mActivity, CHANNEL_ID)
  3. .setContentTitle(ettitle)
  4. .setContentText(etmsg)
  5. .setPriority(NotificationCompat.PRIORITY_DEFAULT)//设置重要性,这里的重要性设置是Android8.0以下使用的(用默认的就刚好)
  6. .setContentIntent(pendingIntent)//跳转activity
  7. .setAutoCancel(true);//点按通知后自动移除通知。
  8. //设置图标(这里需要做不同Android版本设置)
  9. if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {// < Android 5.0(21)
  10. //只设置小图标,为app原icon图片。 状态栏和抽屉列表里都显示小图标
  11. builder.setSmallIcon(com.module.libcommon.R.drawable.ic_launcher_yuan);
  12. } else if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP && // >= Android 5.0(21)并且 < Android 7.0(24)
  13. Build.VERSION.SDK_INT < Build.VERSION_CODES.N){
  14. //设置小图标 和 大图标
  15. //小图标:在状态栏展示,使用图片为背景透明,内容为白色的icon图片。(原因:这部分手机,状态栏图标会显示为白块,只能展示白色icon图片)
  16. //大图标:在抽屉列表展示,设置为app的原icon图片(如果不设置会默认用小图标,并且图片不能适配,不好看)
  17. builder.setSmallIcon(com.module.libcommon.R.drawable.icon_w);
  18. builder.setLargeIcon(ImageUtils.getBitmap("drawable://" + com.module.libcommon.R.drawable.ic_launcher_yuan));
  19. } else if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.N && // >= Android 7.0(24)并且 < Android 8.0(26)
  20. Build.VERSION.SDK_INT < Build.VERSION_CODES.O){
  21. //只设置小图标,小图标:用白色内容,透明背景icon图片。 状态栏和抽屉列表里都显示小图标
  22. builder.setSmallIcon(com.module.libcommon.R.drawable.icon_w);
  23. } else if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.O){ // >= Android 8.0(26)
  24. //只设置小图标,为app原icon图片。 在状态栏和抽屉列表里都显示app的icon。
  25. // * 这里有个问题是,不管我设置了什么图片做图标,都会展示app的icon作为图标。但是不设置图标使用会报错崩溃的,还要设置。
  26. // * 因为测试机型有限,所以设置为app原icon图片。
  27. builder.setSmallIcon(com.module.libcommon.R.drawable.ic_launcher_yuan);//小图标
  28. }

4.显示通知

调用 NotificationManagerCompat.notify(),并将通知的唯一 ID 和 NotificationCompat.Builder.build() 的结果传递给它

  1. //步骤4:显示通知
  2. notificationId = Util.getRandomNumberInt(100,1);
  3. NotificationManagerCompat notificationManager = NotificationManagerCompat.from(mActivity);
  4. notificationManager.notify(notificationId, builder.build());//notificationId:通知 ID

二、消息通知实现步骤(使用分组)

1.创建通知渠道,并设置重要性(这个8.0及以上必须需要设置的内容,才能提供通知)

 和 “标准通知实现步骤 1” 一样写,然后把importance重要性设置为高等级,这个有响铃。

int importance = NotificationManager.IMPORTANCE_HIGH;//设置渠道重要性, 消息用高等级的,有响铃

2.设置点击通知跳转activity

 和 “标准通知实现步骤 2” 一样写

3.创建通知组并为其添加通知

和 “标准通知实现步骤 3” 一样写,然后修改下面几点:

3.1、修改优先级为高等级:.setPriority(NotificationCompat.PRIORITY_HIGH)//设置优先级(重要性),这里的重要性设置是Android8.0以下使用的(高等级有响铃)

3.2、为该通知组定义一个唯一标识符String字符串,通知组名称:private String GROUP_KEY_WORK_EMAIL = "WORK_EMAIL";

3.3、调用 setGroup() 并传入通知组名称:.setGroup(GROUP_KEY_WORK_EMAIL); 

*** Google文档说明:如需创建通知组,请为该通知组定义一个唯一标识符字符串。然后,对于您想要添加到通知组中的每条通知,只需调用 setGroup() 并传入通知组名称即可。***

  1. NotificationCompat.Builder builder = new NotificationCompat.Builder(mActivity, CHANNEL_ID)
  2. .setContentTitle(ettitle)
  3. .setContentText(etmsg)
  4. .setPriority(NotificationCompat.PRIORITY_HIGH)//设置重要性,这里的重要性设置是Android8.0以下使用的(消息用高等级的,有响铃)
  5. .setContentIntent(pendingIntent)//跳转activity
  6. .setAutoCancel(true)//点按通知后自动移除通知。
  7. .setGroup(GROUP_KEY_WORK_EMAIL);//调用 setGroup()并传入通知组名称

4.设置通知组摘要

*** 这个是个Google说明:
               在 Android 7.0(API 级别 24)及更高版本上,系统会使用每条通知中的文本摘要,自动为您的通知组创建摘要。

        要支持无法显示嵌套通知组的较低版本,您必须另外创建一条通知来充当摘要。这是显示的唯一通知,系统会隐藏所有其他通知。

        因此,此摘要应包含所有其他通知的片段,供用户点按以打开您的应用。*** 

总之:添加这个是为了在不支持通知组的低端设备上,也能展示消息通知给用户。

如需添加通知组摘要,请按以下步骤操作:

4.1、使用通知组说明创建新通知 - 通常最好使用收件箱样式的通知实现此目的。
       4.2、通过调用 setGroup() 将摘要通知添加到通知组中。
       4.3、通过调用 setGroupSummary(true) 指定将其用作通知组摘要。

  1. //设置摘要通知组
  2. NotificationCompat.Builder summaryNotification = new NotificationCompat.Builder(mActivity, CHANNEL_ID)
  3. .setContentTitle(ettitle)//低版本:标题
  4. .setContentText(etmsg)//低版本:内容
  5. .setAutoCancel(true)//点按通知后自动移除通知。
  6. .setGroup(GROUP_KEY_WORK_EMAIL)//调用 setGroup()并传入通知组名称(将摘要通知添加到通知组中)
  7. .setStyle(new NotificationCompat.InboxStyle()
  8. .setBigContentTitle("new messages")//低版本:展开显示-标题
  9. .addLine(ettitle + " " + etmsg) //低版本:展开显示-内容
  10. .setSummaryText("消息"))//低版本:通知的头部信息
  11. .setGroupSummary(true);//指定将其用作通知组摘要

5.设置通知图标icon

通知组和通知组摘要2个都需要设置图标,这里统一写在一起了。

  1. //设置图标(这里需要做不同Android版本设置)
  2. if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {// < Android 5.0(21)
  3. //只设置小图标,为app原icon图片。 状态栏和抽屉列表里都显示小图标
  4. builder.setSmallIcon(com.module.libcommon.R.drawable.ic_launcher_yuan);
  5. summaryNotification.setSmallIcon(com.module.libcommon.R.drawable.ic_launcher_yuan);
  6. } else if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP && // >= Android 5.0(21)并且 < Android 7.0(24)
  7. Build.VERSION.SDK_INT < Build.VERSION_CODES.N){
  8. //设置小图标 和 大图标
  9. //小图标:在状态栏展示,使用图片为背景透明,内容为白色的icon图片。(原因:这部分手机,状态栏图标会显示为白块,只能展示白色icon图片)
  10. //大图标:在抽屉列表展示,设置为app的原icon图片(如果不设置会默认用小图标,并且图片不能适配,不好看)
  11. builder.setSmallIcon(com.module.libcommon.R.drawable.icon_w);
  12. builder.setLargeIcon(ImageUtils.getBitmap("drawable://" + com.module.libcommon.R.drawable.ic_launcher_yuan));
  13. summaryNotification.setSmallIcon(com.module.libcommon.R.drawable.icon_w);
  14. summaryNotification.setLargeIcon(ImageUtils.getBitmap("drawable://" + com.module.libcommon.R.drawable.ic_launcher_yuan));
  15. } else if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.N && // >= Android 7.0(24)并且 < Android 8.0(26)
  16. Build.VERSION.SDK_INT < Build.VERSION_CODES.O){
  17. //只设置小图标,小图标:用白色内容,透明背景icon图片。 状态栏和抽屉列表里都显示小图标
  18. builder.setSmallIcon(com.module.libcommon.R.drawable.icon_w);
  19. summaryNotification.setSmallIcon(com.module.libcommon.R.drawable.icon_w);
  20. } else if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.O){ // >= Android 8.0(26)
  21. //只设置小图标,为app原icon图片。 在状态栏和抽屉列表里都显示app的icon。
  22. // * 这里有个问题是,不管我设置了什么图片做图标,都会展示app的icon作为图标。但是不设置图标使用会报错崩溃的,还要设置。
  23. // * 因为测试机型有限,所以设置为app原icon图片。
  24. builder.setSmallIcon(com.module.libcommon.R.drawable.ic_launcher_yuan);//小图标
  25. summaryNotification.setSmallIcon(com.module.libcommon.R.drawable.ic_launcher_yuan);//小图标
  26. }

6.显示通知

摘要通知 ID 和通知组id,不要写成一样的,不然会没有通知

***Google说明:摘要通知 ID 应保持不变,以便其仅发布一次;这样,如果摘要信息发生更改(后续在通知组中添加通知会使现有摘要发生更新),您就可以之后再对其进行更新。***

  1. //步骤6:显示通知
  2. NotificationManagerCompat notificationManager = NotificationManagerCompat.from(mActivity);
  3. notificationManager.notify(notificationId, builder.build());//通知组 ID
  4. notificationManager.notify(SUMMARY_ID, summaryNotification.build());///通知组摘要通知 ID

总结及demo链接

以上就是今天要讲的内容,本文仅仅简单介绍了标准通知,消息通知,2种情况下的使用。  

demo下载链接 https://download.csdn.net/download/u010375874/13755454

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/575572
推荐阅读
相关标签
  

闽ICP备14008679号