Вещательный приемник внутри службы
Я пытаюсь запустить 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();
}
}