Android 安卓坚持通知被短信打断-如何使其不可中断?

Android 安卓坚持通知被短信打断-如何使其不可中断?,android,notifications,android-notifications,firebase-cloud-messaging,Android,Notifications,Android Notifications,Firebase Cloud Messaging,简短版本: 我想创建一个通知,该通知在用户清除之前不被所有其他通知、SMS消息等干扰 长版本: 我正在使用Firebase云消息向我的手机发送警报。消息是根据主题处理的,我需要不断重复“报警”消息,直到用户清除通知。目前,这是通过设置带有FLAG_persistent的通知来实现的,它会循环声音 问题在于,当收到不同的通知或短信时,持续的“报警”通知将永久停止 我想忽略所有新通知,或在播放新通知后重新启动警报。我已经搜索了几个小时,尝试了几个标志和设置,但不知道怎么做 下面是我用来处理FCM消息

简短版本:

我想创建一个通知,该通知在用户清除之前不被所有其他通知、SMS消息等干扰

长版本:

我正在使用Firebase云消息向我的手机发送警报。消息是根据主题处理的,我需要不断重复“报警”消息,直到用户清除通知。目前,这是通过设置带有FLAG_persistent的通知来实现的,它会循环声音

问题在于,当收到不同的通知或短信时,持续的“报警”通知将永久停止

我想忽略所有新通知,或在播放新通知后重新启动警报。我已经搜索了几个小时,尝试了几个标志和设置,但不知道怎么做

下面是我用来处理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)处于活动状态时(或创建新通知,然后再次创建报警),我可以通过忽略这些通知来防止自己的通知中断报警。但是,来自其他程序的短信和通知仍然会中断,因此这不是一个完美的解决方案。

不幸的是,我认为你不会有这样的运气。据我所知,安卓不会让你收到一个优先通知

但是,在Firebase控制台中,当您转到通知部分并单击高级时,可以将通知的优先级设置为高并设置声音

因为它看起来像是以编程方式编写通知,并将优先级设置为Max,这将获得相同的效果

根据谷歌的文档,将优先级设置为高:

当高优先级通知到达时(见右图),它会以一个扩展的布局向用户显示一段短时间,以显示可能的操作

在这段时间之后,通知将退回到通知阴影。如果通知的优先级标记为“高”、“最大”或“全屏”,则会收到平视通知

另外,请查看此信息,以便有人在收到通知时不会在需要时离开
不幸的是,我认为你在这件事上运气不好。据我所知,安卓不会让你收到一个优先通知

但是,在Firebase控制台中,当您转到通知部分并单击高级时,可以将通知的优先级设置为高并设置声音

因为它看起来像是以编程方式编写通知,并将优先级设置为Max,这将获得相同的效果

根据谷歌的文档,将优先级设置为高:

当高优先级通知到达时(见右图),它会以一个扩展的布局向用户显示一段短时间,以显示可能的操作

在这段时间之后,通知将退回到通知阴影。如果通知的优先级标记为“高”、“最大”或“全屏”,则会收到平视通知

另外,请查看此信息,以便有人在收到通知时不会在需要时离开

谢谢您的回复。我从指定“优先级”高的服务器发送消息,发送“到”主题,只发送数据字段(而不是通知字段),以确保应用程序即使在后台也能处理消息。我很确定应用程序的消息部分正在工作,只是通知部分需要进行更改。我不确定另一个问题与这个问题有什么关系。报警通知会持续显示在任务栏中,但一旦播放新通知,声音就会停止。也许可以尝试创建一个服务,然后播放一些音频,这将需要显示一个通知,例如当应用程序播放音乐时。感谢您的响应。我从指定“优先级”高的服务器发送消息,发送“到”主题,只发送数据字段(而不是通知字段),以确保应用程序即使在后台也能处理消息。我很确定应用程序的消息部分正在工作,只是通知部分需要进行更改。我不确定另一个问题与这个问题有什么关系。报警通知会持续显示在任务栏中,但在播放新通知后声音会停止。也许可以尝试创建一个服务,然后播放一些音频,这将需要显示一个通知,例如当应用程序播放音乐时。