当我打开某个屏幕时,我怎么可能收不到通知?- Android

q35jwt9p  于 2023-03-16  发布在  Android
关注(0)|答案(2)|浏览(130)

在我的应用程序中,我有几个活动,其中一个是聊天。在这个屏幕中,我有正在与我聊天的人的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())
        }
    }
dnph8jn4

dnph8jn41#

我认为这与firebase-cloud-messaging无关,因为firebase-cloud-messaging只是一个消息通道,所以你应该在你自己的业务代码中完成它。
一种建议的方法是您可以设置一个条件。如果活动是可见的,并且您在onMessageReceived中接收到的用户ID与您正在聊天的用户ID相同,那么您不应该在onMessageReceived函数中创建自己的通知。

vwkv1x7d

vwkv1x7d2#

Android #聊天#通知#闪屏

问题:当应用程序处于后台时,如何从通知中打开特定屏幕。
答复:

  • 在Android应用程序中正确设置通知任务。
  • 发送通知到您的设备有应用程序打开屏幕.
  • 打开代码并在启动画面中写入命令。

Splashscreen.java -〉onCreate()

@Override
        protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_splash);
       
        onNewIntent(getIntent());          //  onNewIntent  is the Main line.
       }
  • 退出onCreate()方法后,**通过按Alt + Insert按钮覆盖newIntent()**方法。
  • 使用***newIntent()***方法编写代码
@Override
    protected void onNewIntent(Intent intent) {
    super.onNewIntent(intent);
    if(intent.hasExtra("action")){
    if (intent.getStringExtra("action").equals("112")){
         Intent intent1 = new Intent(this, MainActivity.class);  // opening in **Main Activity** to *redirect* in **Chat Screen**
         intent1.putExtra("action","112");   //  here "112" is the chat notification action.
         startActivity(intent1);
       }
      }
    }
  • 打开***主活动.java***-〉创建()
  • 如果Intent具有可用数据,则编写代码以找出Intent及其操作。
protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.activity_main);
        // check if intent have action in data.
        if(getIntent().hasExtra("action")){  

        // check if data available then action == 112 is available or not.
        if(getIntent().getStringExtra("action").equals("112")){   

        // opening ChattingActivity.java if all scenario is not nullable.
        startActivity(new Intent(this,ChattingActivity.class));  
      }
     }

记住密码.

相关问题