代码之家  ›  专栏  ›  技术社区  ›  Yuri

为什么仅从上次通知向活动发送额外参数?

  •  0
  • Yuri  · 技术社区  · 1 年前

    每个人

    我正在发送两个带有不同内容文本的本地推送通知。当单击每个推送时,我希望某个活动(RecallActivity)将打开,其中的文本与单击的通知的内容文本相对应。但我总是从上次通知中获得额外数据,即使我单击了第一个通知。我不明白为什么。

    我的服务中创建通知的代码:

    override fun doWork(): Result {
    
        val word = inputData.getString("WORD")
    
        val intent = Intent(applicationContext, RecallActivity::class.java).apply {
            flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK
            this.putExtra("word", word)
        }
    
        val pendingIntent: PendingIntent? = TaskStackBuilder.create(applicationContext).run {
            addNextIntent(intent)
            getPendingIntent(0,
                PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE)
        }
    
        val builder = NotificationCompat.Builder(context, "CHANNEL_ID")
            .setSmallIcon(R.drawable.notification_icon)
            .setContentTitle("Scheduled notification")
            .setContentText(word)
            .setContentIntent(pendingIntent)
            .setPriority(NotificationCompat.PRIORITY_DEFAULT)
            .setAutoCancel(true)
    
        with(NotificationManagerCompat.from(context)) {
            notify(nextInt(), builder.build())
        }
    
        return Result.success()
    }
    

    “我的活动”中尝试从通知中获取额外参数的代码:

    class RecallActivity : AppCompatActivity() {
        override fun onCreate(savedInstanceState: Bundle?) {
            super.onCreate(savedInstanceState)
            setContentView(R.layout.activity_recall)
    
            wordTextView.text = intent.getStringExtra("word")
        }
    }
    

    请帮忙:)

    1 回复  |  直到 1 年前
        1
  •  0
  •   CommonsWare    1 年前
        val pendingIntent: PendingIntent? = TaskStackBuilder.create(applicationContext).run {
            addNextIntent(intent)
            getPendingIntent(0,
                PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE)
        }
    

    不要总是使用 0 . 使用不同的 requestCode 每个不同的值 PendingIntent .

    我正在发送两个带有不同内容文本的本地推送通知

    那么你应该使用两种不同的 请求代码 值,例如 0 1 .