【问题标题】:How can I differentiate which action has been clicked in a notification?如何区分在通知中单击了哪个操作?
【发布时间】:2019-07-21 22:22:44
【问题描述】:

我正在制作一个 Android 应用程序,它每天多次发送带有动作的通知,问题是此时用户单击哪个动作并不重要,它总是将第一个意图发送到广播接收器。

我的代码:

fun sendNotification(title: String, content: String, tomaID: Int){
    val takeShotIntent = Intent(context, TreatmentBroadcastReceiver::class.java).apply {
        putExtra("TomaID", tomaID)
        putExtra("AcctionToma", 0)

    }
    val takeShotPendingIntent = PendingIntent.getBroadcast(context, NOTIFICACION_ID, takeShotIntent, PendingIntent.FLAG_ONE_SHOT)

    val skipShotIntent = Intent(context, TreatmentBroadcastReceiver::class.java).apply {
        putExtra("TomaID", tomaID)
        putExtra("AcctionToma", 1)

    }
    val skipShotPendingIntent = PendingIntent.getBroadcast(context, NOTIFICACION_ID, skipShotIntent, PendingIntent.FLAG_ONE_SHOT)

    val postPoneShotIntent = Intent(context, TreatmentBroadcastReceiver::class.java).apply {
        putExtra("TomaID", tomaID)
        putExtra("AcctionToma", 2)
    }
    val postPoneShotPendingIntent = PendingIntent.getBroadcast(context, NOTIFICACION_ID, postPoneShotIntent, PendingIntent.FLAG_ONE_SHOT)


    val notifyBuilder = getNotificationBuilder(title,content)
    notifyBuilder.addAction(R.drawable.ic_capsula, context.getString(R.string.tomar), takeShotPendingIntent)
    notifyBuilder.addAction(R.drawable.ic_capsula,context.getString(R.string.saltar), skipShotPendingIntent)
    notifyBuilder.addAction(R.drawable.ic_capsula,context.getString(R.string.posponer), postPoneShotPendingIntent)
    mNotifyManager = context.getSystemService(NOTIFICATION_SERVICE) as NotificationManager
    mNotifyManager.notify(NOTIFICACION_ID, notifyBuilder.build())
}

以及广播接收器类:

class TreatmentBroadcastReceiver : BroadcastReceiver() {

    override fun onReceive(context: Context, intent: Intent) {
        val idToma = intent.getIntExtra("TomaID", -1)
        val acctionToma = intent.getIntExtra("AcctionToma", -1)
        Log.d("EstasReciviendo", idToma.toString() + " " + acctionToma)

    }
}

我需要根据用户的选择发送一个 ID 和一个代表应用应该做什么的数字。 ID 发送没有问题,但正如我在上面提到的,“AccionToma”在 onReceive 方法中始终为 0,无论点击哪个操作。

我的 logcat 输出:

2019-07-21 17:09:10.993 20286-20286/com.kps.spart.moskimedicationreminder D/EstasReciviendo: 1049 0

所以, 如何区分点击了哪个操作?

【问题讨论】:

    标签: android kotlin broadcastreceiver android-notifications android-pendingintent


    【解决方案1】:

    为您的三个 PendingIntent.getBroadcast() 调用使用不同的唯一值,而不是 NOTIFICACION_ID

    就目前而言,您的第二个PendingIntent.getBroadcast() 调用替换了第一个,第三个PendingIntent.getBroadcast() 调用替换了第二个。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-06-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-06
      • 1970-01-01
      相关资源
      最近更新 更多