将数据传递给Intent / BroadcastReceiver

时间:2019-05-08 13:11:51

标签: android kotlin broadcastreceiver

我正在调用一个意图,该程序包是我无法控制的另一个应用程序。我已经设置了BroadcastReceiver来侦听并从意图中获取数据。在我所附的代码中,这非常正常。

我的问题是,我现在需要根据我想从调用意图的活动中传入的数据来执行不同的操作。

是否可以将活动中的数据传递给我可以使用的BroadcastReceiver?任何帮助都将受到赞赏。

我尝试使用捆绑包(putString和getString),但是启动意图时,这是第三方意图,唯一的捆绑包是他们提供给我的数据。我尝试传递的捆绑包不存在。

MainActivity的呼叫

        getTickets.setOnClickListener {
            Log.i("Track", "MA1: " + Date().toString())
            if (checkOrientation()) {
                intent = Intent()
                intent.setAction("com.trakitgps.GET_VEHICLE_NUM")
                intent.setPackage("com.trakitgps")
                val filter = IntentFilter("com.trakitgps.GET_VEHICLE_NUM_RESPONSE")
                registerReceiver(receiver, filter)
                startActivity(intent)
            }
        }

BroadcastReceiver

class TrackItReceiver : BroadcastReceiver() {
    override fun onReceive(context: Context, intent: Intent) {


        when (intent.action) {
            "com.trakitgps.GET_VEHICLE_NUM_RESPONSE" -> {
                val truckNbr = intent.extras.getString("vehicleNum")
                val errorMsg = intent.extras.getString("errorMsg")

                val newIntent = Intent(context, TruckTicketsActivity::class.java)
                newIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
                newIntent.putExtra("assignedTruck", truckNbr)
                newIntent.putExtra("truckError", errorMsg)
                context.startActivity(newIntent)
            }
        }
    }
}

1 个答案:

答案 0 :(得分:1)

好的。

创建BroadcastReceiver时,向其传递构造函数中所需的数据。然后,当onReceive()被调用时,它具有所需的数据。像这样:

// Create the BroadcastReceiver
BroadcastReceiver receiver = new MyReceiver(data, another, andAnother);
registerReceiver(receiver, filter)
startActivity(intent)

MyReceiver中,声明成员变量以容纳dataanotherandAnother,然后在构造函数中对其进行初始化。