为什么通知组不能在android中工作?我做错了什么?
这里我附加了我的notification utils类,我试图将我的通知分组,但每次收到单独的通知时,我都会传递通知id,该id对于所有通知都是唯一的。当我想从面板中删除特定通知时使用此选项。为什么通知组不能在android中工作?我做错了什么?,android,push-notification,notifications,Android,Push Notification,Notifications,这里我附加了我的notification utils类,我试图将我的通知分组,但每次收到单独的通知时,我都会传递通知id,该id对于所有通知都是唯一的。当我想从面板中删除特定通知时使用此选项。 public class NotificationUtils { private static final String TAG = "NotificationUtilss"; private static final String CHANNEL_ID = "channel"; private st
public class NotificationUtils {
private static final String TAG = "NotificationUtilss";
private static final String CHANNEL_ID = "channel";
private static final String CHANNEL_NAME = "my_channel";
private static final String GROUP_KEY_PN = "com.demo.app.PN";
private static final String URL = "url";
private static final String ACTIVITY = "activity";
Map<String, Class> activityMap = new HashMap<>();
private Context mContext;
public NotificationUtils(Context mContext) {
this.mContext = mContext;
//Populate activity map
activityMap.put("Activity1", Activity1.class);
activityMap.put("Activity2", Activity2.class);
activityMap.put("Activity3", Activity3.class);
}
public void displayNotification(NotificationVO notificationVO, Intent resultIntent) {
{
String notification_id = notificationVO.getNotification_id();
String message = notificationVO.getMessage();
String title = notificationVO.getTitle();
String iconUrl = notificationVO.getIconUrl();
String action = notificationVO.getAction();
String destination = notificationVO.getActionDestination();
Bitmap iconBitMap = null;
if (iconUrl != null) {
iconBitMap = getBitmapFromURL(iconUrl);
}
final int icon = R.drawable.logo;
PendingIntent resultPendingIntent;
if (URL.equals(action)) {
Intent notificationIntent = new Intent(Intent.ACTION_VIEW,
Uri.parse(destination));
resultPendingIntent = PendingIntent.getActivity(mContext, 0, notificationIntent,
0);
} else if (ACTIVITY.equals(action) && activityMap.containsKey(destination)) {
resultIntent = new Intent(mContext, activityMap.get(destination));
resultPendingIntent =
PendingIntent.getActivity(
mContext,
0,
resultIntent,
PendingIntent.FLAG_UPDATE_CURRENT
);
} else {
resultIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP |
Intent.FLAG_ACTIVITY_SINGLE_TOP);
resultPendingIntent =
PendingIntent.getActivity(
mContext,
0,
resultIntent,
PendingIntent.FLAG_UPDATE_CURRENT
);
}
final NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(mContext,
CHANNEL_ID);
Notification notification;
if (iconBitMap == null) {
//When Inbox Style is applied, user can expand the notification
NotificationCompat.InboxStyle inboxStyle = new NotificationCompat.InboxStyle();
inboxStyle.addLine(message);
inboxStyle.setBigContentTitle(title);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
notification = mBuilder
.setTicker(title)
.setAutoCancel(true)
.setContentTitle(title)
.setContentText(message)
.setContentIntent(resultPendingIntent)
.setStyle(inboxStyle)
.setWhen(new Date().getTime())
.setSmallIcon(R.drawable.logo)
.setLargeIcon(BitmapFactory.decodeResource(mContext.getResources(),
icon))
.setGroup(GROUP_KEY_PN)
.setGroupSummary(true)
.build();
}
}
NotificationManager notificationManager = (NotificationManager)
mContext.getSystemService(Context.NOTIFICATION_SERVICE);
// Since android Oreo notification channel is needed.
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
NotificationChannel channel = new NotificationChannel(CHANNEL_ID, CHANNEL_NAME,
NotificationManager.IMPORTANCE_DEFAULT);
notificationManager.createNotificationChannel(channel);
}
NotificationManagerCompat.from(mContext).notify(Integer.parseInt(notification_id),
notification);
}
}
}
公共类通知utils{
私有静态最终字符串TAG=“NotificationUtilss”;
专用静态最终字符串通道\u ID=“通道”;
私有静态最终字符串通道\u NAME=“my\u通道”;
私有静态最终字符串组\u KEY\u PN=“com.demo.app.PN”;
私有静态最终字符串URL=“URL”;
私有静态最终字符串ACTIVITY=“ACTIVITY”;
Map activityMap=new HashMap();
私有上下文;
公共通知UTILS(上下文mContext){
this.mContext=mContext;
//填充活动图
activityMap.put(“Activity1”,Activity1.class);
activityMap.put(“Activity2”,Activity2.class);
activityMap.put(“Activity3”,Activity3.class);
}
公共无效显示通知(NotificationVO NotificationVO,意向结果){
{
字符串notification_id=notificationVO.getNotification_id();
String message=notificationVO.getMessage();
String title=notificationVO.getTitle();
字符串iconUrl=notificationVO.getIconUrl();
String action=notificationVO.getAction();
字符串destination=notificationVO.getActionDestination();
位图iconBitMap=null;
如果(iconUrl!=null){
iconBitMap=getBitmapFromURL(iconUrl);
}
最终int图标=R.drawable.logo;
悬而未决结果悬而未决;
if(URL.equals(action)){
意图通知意图=新意图(Intent.ACTION\u视图,
parse(destination));
ResultPendingContent=PendingContent.getActivity(mContext,0,notificationIntent,
0);
}else if(ACTIVITY.equals(action)和activityMap.containsKey(destination)){
resultint=newintent(mContext,activityMap.get(destination));
结果结束语=
pendingent.getActivity(
McContext,
0,
结果,
PendingEvent.FLAG_更新_当前
);
}否则{
resultIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP|
意图。标记活动(单个顶部);
结果结束语=
pendingent.getActivity(
McContext,
0,
结果,
PendingEvent.FLAG_更新_当前
);
}
final NotificationCompat.Builder mBuilder=新NotificationCompat.Builder(mContext,
通道ID);
通知;
if(iconBitMap==null){
//应用收件箱样式时,用户可以展开通知
NotificationCompat.InboxStyle InboxStyle=新NotificationCompat.InboxStyle();
inboxStyle.addLine(消息);
inboxStyle.setBigContentTitle(标题);
if(Build.VERSION.SDK\u INT>=Build.VERSION\u code.N){
通知=mBuilder
.setTicker(标题)
.setAutoCancel(真)
.setContentTitle(标题)
.setContentText(消息)
.setContentIntent(结果结束内容)
.setStyle(收件箱样式)
.setWhen(新日期().getTime())
.setSmallIcon(右可绘制徽标)
.setLargeIcon(BitmapFactory.decodeResource(mContext.getResources()),
图标)
.setGroup(组密钥)
.setGroupSummary(真)
.build();
}
}
NotificationManager NotificationManager=(NotificationManager)
mContext.getSystemService(Context.NOTIFICATION\u服务);
//因为需要android Oreo通知通道。
if(Build.VERSION.SDK\u INT>=Build.VERSION\u code.O){
NotificationChannel通道=新的NotificationChannel(通道ID、通道名称、,
NotificationManager.重要性(默认值);
notificationManager.createNotificationChannel(频道);
}
NotificationManagerCompat.from(mContext).notify(Integer.parseInt)(通知id),
通知);
}
}
}
我需要帮助仅应用通知样式将通知分组,但应用组和组摘要不起作用 如果您不想要摘要,请尝试删除它或使用摘要签出开发人员的示例如果您不想要摘要,请尝试删除它或使用摘要签出开发人员的示例您需要设置唯一标识符,因为您使用了
setGroupSummary
true,并以不同的方式创建摘要和实际通知。如果您想要摘要,您需要:
val SUMMARY_ID = 0 // This is unique
notify(SUMMARY_ID, summaryNotification)
val摘要\u ID=0
val GROUP\u KEY\u WORK\u EMAIL=“com.android.example.WORK\u EMAIL”
val newMessageNotification=NotificationCompat.Builder(this@MainActivity,频道号)
.setSmallIcon(R.drawable.ic\u通知\u电子邮件\u状态)
.setContentTitle(emailObject1.getSummary())
.setContentText(“你不会相信…”)
.setGroup(组\密钥\工作\电子邮件)
.build()
val summaryNotification=NotificationCompat.Builder(this@MainActivity,频道号)
.setContentTitle(emailObject.getSummary())
//设置内容文本以支持运行API级别<24的设备
.setContentText(“两条新消息”)
.setSmallIcon(R.drawable.ic\u通知\u摘要\u状态)
//将摘要信息构建到InboxStyle模板中
.setStyle(NotificationCompat.InboxStyle()
.addLine(“Alex Faarborg检查此文件”)
val SUMMARY_ID = 0
val GROUP_KEY_WORK_EMAIL = "com.android.example.WORK_EMAIL"
val newMessageNotification = NotificationCompat.Builder(this@MainActivity, CHANNEL_ID)
.setSmallIcon(R.drawable.ic_notify_email_status)
.setContentTitle(emailObject1.getSummary())
.setContentText("You will not believe...")
.setGroup(GROUP_KEY_WORK_EMAIL)
.build()
val summaryNotification = NotificationCompat.Builder(this@MainActivity, CHANNEL_ID)
.setContentTitle(emailObject.getSummary())
//set content text to support devices running API level < 24
.setContentText("Two new messages")
.setSmallIcon(R.drawable.ic_notify_summary_status)
//build summary info into InboxStyle template
.setStyle(NotificationCompat.InboxStyle()
.addLine("Alex Faarborg Check this out")
.addLine("Jeff Chang Launch Party")
.setBigContentTitle("2 new messages")
.setSummaryText("janedoe@example.com"))
//specify which group this notification belongs to
.setGroup(GROUP_KEY_WORK_EMAIL)
//set this notification as the summary for the group
.setGroupSummary(true)
.build()
NotificationManagerCompat.from(this).apply {
notify(emailNotificationId, newMessageNotification)
notify(SUMMARY_ID, summaryNotification)
}