Где я должен зарегистрировать приемник вещания? - PullRequest
1 голос
/ 28 октября 2011

Я разрабатываю приложение, использующее Bluetooth для автоматического подключения к соседним сопряженным устройствам. По этой причине мне нужно прослушивать специальные передачи Bluetooth, такие как ACTION_FOUND, DISCOVERY_FINISHED и т. Д., Я должен зарегистрировать приемник вещания, который прослушивает эти трансляции и выполняет соответствующие действия. Дело в том, что мне нужен этот вещательный приемник, чтобы он работал в любое время в фоновом режиме моего приложения. Я попытался встроить его в службу intentservice, но оказалось, что он быстро заканчивается, и onDestroy называется окончанием моего приемника. Чтобы преодолеть эту проблему, я вставил бесконечный цикл, который прерывается, только когда атрибут превращается из истинного в ложное. Почему-то я чувствую, что это плохая практика, и поэтому я спрашиваю вас, есть ли лучшее решение?

PS. Должен ли я соответствовать приемнику в основной деятельности? И когда это разрушается? Вызывается ли onDestroy только тогда, когда я выхожу из приложения с помощью кнопки назад, или завершаю процесс с помощью средства удаления задач, или это происходит также при входе в другое окно графического интерфейса в моем приложении?

Спасибо, Майк

1 Ответ

2 голосов
/ 28 октября 2011

Если вы зарегистрируете свой приемник динамически (Context.registerReceiver), ваша задача - отменить его регистрацию (Context.unregisterReceiver), прежде чем ваша активность будет приостановлена.И, как следует из документации:

Вы не получите намерения при приостановке, и это сократит ненужные системные издержки

onPause будет вызываться при скрытииваша деятельность.И вы можете заново зарегистрироваться в onResume.

Однако это не то, что вам нужно.Если вы хотите получать трансляции, даже если ваше приложение мертво, вам нужно объявить его в манифесте Android.Я думаю, что этот код будет работать:

    <receiver android:name=".YourReceiverClassName">
        <intent-filter>
            <action android:name="android.bluetooth.adapter.action.ACTION_FOUND"/>
            <action android:name="android.bluetooth.adapter.action.ACTION_DISCOVERY_FINISHED"/>
        </intent-filter>
    </receiver>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...