Широковещательный приемник в пределах службы
Я пытаюсь запустить BroadcastReceiver
внутри Service
. То, что я пытаюсь сделать, это иметь фон работает service
переход, который собирает входящие текстовые сообщения и регистрирует входящие телефонные звонки. Я решил, что лучший способ сделать это-иметь service
запуск, который включает в себя широковещательный приемник, который может каталогизировать либо.
как мне это сделать? У меня уже есть моя служба и работает.
2 ответа:
поскольку ваш сервис уже настроен, просто добавьте широковещательный приемник в свой сервис:
private final BroadcastReceiver receiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { String action = intent.getAction(); if(action.equals("android.provider.Telephony.SMS_RECEIVED")){ //action for sms received } else if(action.equals(android.telephony.TelephonyManager.ACTION_PHONE_STATE_CHANGED)){ //action for phone state changed } } };
к вашим услугам
onCreate
этого:IntentFilter filter = new IntentFilter(); filter.addAction("android.provider.Telephony.SMS_RECEIVED"); filter.addAction(android.telephony.TelephonyManager.ACTION_PHONE_STATE_CHANGED); filter.addAction("your_action_strings"); //further more filter.addAction("your_action_strings"); //further more registerReceiver(receiver, filter);
и к вашим услугам
onDestroy
:unregisterReceiver(receiver);
и вы хорошо идти, чтобы получить трансляцию для того, что когда-либо фильтры вы упоминаете в
onCreate
. Не забудьте добавить любое разрешение, если это необходимо. например,<uses-permission android:name="android.permission.RECEIVE_SMS" />
лучший шаблон для создания автономной
BroadcastReceiver
. Это гарантирует, что ваше приложение может реагировать на трансляцию, будь тоService
работает. Фактически, использование этого шаблона может устранить необходимость в постоянном запускеService
в целом.зарегистрировать
BroadcastReceiver
в манифесте, и создать отдельный класс/файл для него.например:
<receiver android:name=".FooReceiver" > <intent-filter > <action android:name="android.provider.Telephony.SMS_RECEIVED" /> </intent-filter> </receiver>
когда приемник работает, вы просто передать
Intent
(Bundle
) кService
, и ответить к нему вonStartCommand()
.например:
public class FooReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { // do your work quickly! // then call context.startService(); } }