当我打开某个屏幕时如何收不到通知? - 安卓

Posted

技术标签:

【中文标题】当我打开某个屏幕时如何收不到通知? - 安卓【英文标题】:How can I not receive notifications while I have a certain screen open? - Android 【发布时间】:2020-05-25 20:42:38 【问题描述】:

在我的应用程序中,我有几个活动,其中一个是聊天。在此屏幕中,我有与我聊天的人的 ID,每次我发送消息时,都会发送一条推送通知,其中包含消息和与我聊天的人的 ID。当我与此人聊天时,我需要阻止来自他们的通知,并且仅在我没有与该人进行公开聊天时才接收它们。我该怎么做呢?我使用 Firebase 作为后端。

class MyFirebaseMessagingService : FirebaseMessagingService() 

    override fun onMessageReceived(remoteMessage: RemoteMessage) 

        remoteMessage.notification?.let  notification ->

            val data = remoteMessage.data
            val type = data["type"] // chat message,like etc
            val id = data["id"] //userId

            val notificationChannelId = getString(R.string.default_notification_channel_id)
            val soundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION)

            val intent = setIntent(remoteMessage).setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)

            val pendingIntent = PendingIntent.getActivity(this,
                    0,
                    intent,
                    PendingIntent.FLAG_CANCEL_CURRENT)

            val notificationManager = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager

            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) 
                val notificationChannel = NotificationChannel(notificationChannelId, CHANNEL_SPEEACHT, NotificationManager.IMPORTANCE_DEFAULT)
                notificationManager.createNotificationChannel(notificationChannel)
            

            val notificationBuilder = NotificationCompat.Builder(this, notificationChannelId)
                    .setContentTitle(notification.title ?: "")
                    .setContentText(notification.body ?: "")
                    .setSmallIcon(R.drawable.ic_stat)
                    .setSound(soundUri)
                    .setColor(ContextCompat.getColor(applicationContext, R.color.colorNotification))
                    .setAutoCancel(true)
                    .setContentIntent(pendingIntent)

            notificationManager.notify(0, notificationBuilder.build())
        
    

【问题讨论】:

【参考方案1】:

我认为这与 firebase-cloud-messaging 无关,因为 firebase-cloud-messaging 只是一个消息通道,所以你应该在自己的业务代码中进行。

建议的方法是您可以设置条件。如果活动是可见的,并且您在 onMessageReceived 中收到的用户 ID 与您正在聊天的用户 ID 相同,那么您不应该在 onMessageReceived 函数中创建自己的通知。

【讨论】:

以上是关于当我打开某个屏幕时如何收不到通知? - 安卓的主要内容,如果未能解决你的问题,请参考以下文章

手机锁屏后有时收不到微信通知,有时又能收到是怎么回事?

长时间未打开应用,收不到 GCM 推送通知

Firebase (FCM):打开活动并在通知点击时传递数据。安卓

关于安卓未接来电通知

安卓手机屏幕录像之scr

在后台运行安卓手电筒