简短版本:
我想创建一个不会被所有其他通知,短信等不可中断的通知,直到用户清除它为止。
长版:
我正在使用Firebase云消息传递向我的手机发送提醒。根据主题处理消息,我需要连续重复“警报”消息,直到用户清除通知为止。目前,这是通过使用FLAG_INSISTENT设置通知来完成的,这会循环播放声音。
问题是当不同的通知或短信通过时,持续的“警报”通知会永久停止。
我想忽略所有新通知,或在播放新通知后重新启动闹钟。我搜索了几个小时,尝试了几个标志和设置,但无法弄清楚如何做到这一点。
以下是我用来处理FCM消息并设置通知的代码:
public class MyFirebaseMessagingService extends FirebaseMessagingService {
@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
if (remoteMessage.getData() != null){
String messageTopic= remoteMessage.getFrom();
String messageTitle = remoteMessage.getData().get("title");
String messageBody = remoteMessage.getData().get("message");
if (messageTopic.equals("/topics/news")) {
Intent intent = new Intent(this, MainScreenActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
Uri soundUri= RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this)
.setSmallIcon(R.drawable.ic_stat_news)
.setContentTitle(messageTitle)
.setContentText(messageBody)
.setAutoCancel(true)
.setSound(soundUri)
.setContentIntent(pendingIntent)
.setPriority(Notification.PRIORITY_MAX);
NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.notify(30548, notificationBuilder.build());
}
else if (messageTopic.equals("/topics/alarm")) {
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse("http://www.example.com/alarm.php"));
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT);
Uri soundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_ALARM);
NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this)
.setSmallIcon(R.drawable.ic_stat_alarm)
.setContentTitle(messageTitle)
.setContentText(messageBody)
.setAutoCancel(true)
.setSound(soundUri)
.setContentIntent(pendingIntent)
.setPriority(Notification.PRIORITY_MAX);
Notification mNotification = notificationBuilder.build();
mNotification.flags |= Notification.FLAG_INSISTENT;
NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
notificationManager.notify(30549, mNotification);
}
}
}
我可以通过在警报通知ID(30549)处于活动状态时忽略它来阻止我自己的通知中断警报(或创建新通知,然后再次创建警报)。但是,来自其他程序的SMS和通知仍然会中断,因此这不是一个完美的解决方案。
答案 0 :(得分:0)
不幸的是,我不认为你会幸运。 Android不会让您通知我的理解完全优先。
但是,在Firebase控制台中,当您转到“通知”部分并单击“高级”时,可以将通知的优先级设置为“高”并设置声音。
由于您看起来像是以编程方式编写通知并将优先级设置为Max,因此会产生相同的效果。
将优先级设置为高,来自Google的文档:
当高优先级通知到达时(见右图),它会在短时间内呈现给用户,扩展布局会显示可能的操作。
在这段时间之后,通知会撤回到通知阴影。如果通知的优先级被标记为高,最大或全屏,则会收到抬头通知
另外,请查看此消息,告知某人,当他们想要通知时,他们的通知不会消失 here