简体   繁体   English

如何区分通知中单击了哪个操作?

[英]How can I differentiate which action has been clicked in a notification?

I'm making and Android app that sends notifications with actions several times a day, the problem is that at this moment doesn't matter which action the user clicks it always sends the first intent to the broadcast receiver.我正在制作和 Android 应用程序,每天多次发送带有操作的通知,问题是此时用户单击哪个操作并不重要,它总是将第一个意图发送到广播接收器。

My code:我的代码:

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())
}

And the broadcast receiver class:和广播接收器类:

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)

    }
}

I need to send an ID and a number that represents what the app should do based on the user selection.我需要发送一个 ID 和一个数字,代表应用程序应根据用户选择执行的操作。 The ID is sent without problems but as a I mention above the "AccionToma" is always 0 in the onReceive method no matter which action is tapped. ID 发送没有问题,但正如我上面提到的,无论点击哪个操作,onReceive 方法中的“AccionToma”始终为 0。

My logcat output:我的 logcat 输出:

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

So, How can I differentiate which action has been clicked?那么,如何区分单击了哪个操作?

Use different unique values, instead of NOTIFICACION_ID , for your three PendingIntent.getBroadcast() calls.为您的三个PendingIntent.getBroadcast()调用使用不同的唯一值,而不是NOTIFICACION_ID

As it stands, your second PendingIntent.getBroadcast() call replaces the first one, and the third PendingIntent.getBroadcast() call replaces the second.就目前而言,您的第二个PendingIntent.getBroadcast()调用替换了第一个调用,第三个PendingIntent.getBroadcast()调用替换了第二个调用。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM