Вещательный приемник внутри службы

Я пытаюсь запустить 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();
    }   
}
Другие вопросы по тегам