Передача данных в Intent / BroadcastReceiver - PullRequest
1 голос
/ 08 мая 2019

Я вызываю намерение, и пакет является другим приложением, которое я не могу контролировать.Я настроил 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 Ответ

1 голос
/ 10 мая 2019

Конечно.

Когда вы создаете BroadcastReceiver, передайте ему необходимые данные в конструкторе. Затем, когда вызывается onReceive(), у него есть данные, которые ему нужны. Как то так:

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

В MyReceiver объявите переменные-члены для хранения data, another и andAnother и инициализируйте их в конструкторе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...