Android - началоActivityForResult вне действия? - PullRequest
7 голосов
/ 07 марта 2011

У меня есть класс-оболочка (BluetoothDiscoverer), который создается в Сервисе. Этот класс получает BluetoothAdapter и проверяет, включен ли Bluetooth, прежде чем сканировать соседние устройства.

Теперь, если Bluetooth не включен, я хочу иметь возможность делать следующее в этом классе (BluetoothDiscoverer):

Intent enableBluetoothIntent  = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);

startActivityForResult(enableBluetoothIntent, BLUETOOTH_ENABLER);

Теперь я прочитал это: использовать startActivityForResult от неактивности

но я не хочу передавать свою Основную активность в этот объект, так как я хочу иметь дело с результатом (независимо от того, принимает ли пользователь включение Bluetooth или нет) внутри класса BluetoothDiscoverer.

Теперь, если я сделаю BluetoothDiscoverer подклассом Activity

Кажется, я получаю исключение NullPointerException, когда должен вызываться startActivityForResult.

Я думаю, это потому, что мне нужно добавить метод onCreate () / onDestroy (), но это противоречит цели того, что я делаю, так как мне нужно иметь возможность вызывать методы объекта BluetoothDiscoverer в службе, которая создает экземпляр этого класса.

Мне также нужно зарегистрировать широковещательный приемник для извлечения соседних устройств при запуске сканирования. Если класс BluetoothDiscoverer не является Activity, как мне зарегистрировать этот получатель?

Есть ли обходной путь для этого?

Спасибо Andreas

Ответы [ 2 ]

6 голосов
/ 07 марта 2011

startActivityForResult() доступно только для реальных действий на экране.Перепроектируйте ваше приложение так, чтобы пользовательский интерфейс управлялся активностями, , а затем , чтобы ваш сервис сканировал устройства.

Мне также необходимо зарегистрировать приемник широковещания для извлечения соседних устройств, когдасканирование начато.Если класс BluetoothDiscoverer не является Activity, как мне зарегистрировать этот получатель?

Вы избавляетесь от BluetoothDiscoverer и перемещаете его логику в Service, который является Context и, следовательно,можно зарегистрировать получателей.

0 голосов
/ 14 января 2014

В вашем Service создайте Activity, цель которого - запросить обнаружение Bluetooth. Передайте Messenger вместе с Intent для этого Activity и попросите Activity запустить операцию обнаружения:

Intent enableBluetoothIntent  = new Intent(BluetoothAdapter.ACTION_REQUEST_ENABLE);
startActivityForResult(enableBluetoothIntent, BLUETOOTH_ENABLER);

Затем внутри onActivityResult() отправьте сообщение через Messenger обратно к вам.

...