Как говорится в названии, есть способ запустить метод BroadcastReceiver onReceive()
асинхронно?BroadcastReceiver asynchronous onReceive
Основываясь на его реализации, андроид запускает метод onReceive()
на основной теме.
Я использую BroadcastReceiver
для явного запроса разрешения на связь с USB-устройством. Когда разрешение разрешения запроса получено, вызывается метод onReceive()
, но поскольку он работает в основном потоке, нет способа (по крайней мере, не того, что я знаю) сигнализировать, когда он будет завершен. Опрос на булевом флаге блокирует основной поток, который, в свою очередь, блокирует вызов метода onReceive()
.
Есть ли способ для асинхронного вызова onReceive()
или есть альтернативный способ явно (без использования фильтров намерения в манифесте) запрашивать разрешение и подключиться к USB-устройству?
Редактировать: Мне бы хотелось, чтобы метод блокировался до тех пор, пока не будет получено разрешение и не будет установлено соединение.
Да, это решение, но (см. Править) Я хотел бы заблокировать, пока у меня не будет разрешения. –
«Когда диалоговое окно разрешения запроса получено, метод onReceive() называется«. Разве ваш получатель не получает трансляцию, когда разрешение было предоставлено? –
Да, это правильно, когда получено разрешение, 'UsbManager' транслирует' PendingIndent', а получатель вызывает 'onReceive()' и проверяет дополнительные намерения. Но это работает на основном потоке. –