Search code examples
androidbroadcastreceiver

Broadcast receiver sends wrong data from one activity to another activity


I would like to act at one activity from another one. Lets call them Sender and Receiver. So, in Receiver I have registered receiver:

receiver = object : BroadcastReceiver() {
            override fun onReceive(context: Context, intent: Intent) {
                val command = intent.getIntExtra("action_id", -1)
                val bundle = intent.extras

                for (key in bundle!!.keySet()) {
                    val value = bundle[key]
                    Timber.i(String.format("%s %s (%s)", key,
                            value.toString(), value!!.javaClass.name))
                }

            }
        }

registerReceiver(receiver, IntentFilter("command"))

And I send data from `Sender activity before closing it:

backToMess.setOnClickListener {
            dialog.dismiss()

            val intent = Intent()
            intent.action = "command"
            intent.putExtra("action_id", 1)
            intent.putExtra("m_id", intent.getIntExtra("message_id", 0))
            intent.putExtra("list_type", intent.getIntExtra("list_type", 0))
            intent.putExtra("list_pos", intent.getIntExtra("list_pos", 0))
            sendBroadcast(intent)

            finishAndRemoveTask()
        }

Data which I send from Sender is: 1,9238,1,12 and data which I receive at Receiver: 1,0,0,0 I don't understand why it happens. Maybe I can't send several extras or what?


Solution

  • I send from Sender is: 1,9238,1,12

    val intent = Intent()
    intent.getIntExtra("message_id", 0)
    

    you are reading data from an object that you just created which is "0".

    try

       backToMess.setOnClickListener {
            dialog.dismiss()
    
            val broadcastIntent = Intent()
            broadcastIntent.action = "command"
            broadcastIntent.putExtra("action_id", 1)
            broadcastIntent.putExtra("m_id", intent.getIntExtra("message_id", 0))
            broadcastIntent.putExtra("list_type", intent.getIntExtra("list_type", 0))
            broadcastIntent.putExtra("list_pos", intent.getIntExtra("list_pos", 0))
            sendBroadcast(broadcastIntent)
    
            finishAndRemoveTask()
        }