Я видел несколько примеров того, как реализовать BroadCastReceiver, но как я должен реализовать Сервис, который должен реагировать на некоторое незаконченное Намерение (например, входящий телефонный вызов)... На самом деле я задавался вопросом о той же "проблеме", но в Действии.. У Вас, очевидно, есть класс, который расширяет Обслуживание или Действие), таким образом, это не может также расширить BroadCastReceiver... Похоже, что мы не можем сделать "осведомленные о платформе" службы и/или Activties?
Чтобы зарегистрировать действие для получения определенного намерения, вам необходимо:
// Flag if receiver is registered
private boolean mReceiversRegistered = false;
// I think this is the broadcast you need for something like an incoming call
private String INCOMING_CALL_ACTION = "android.intent.action.PHONE_STATE";
// Define a handler and a broadcast receiver
private final Handler mHandler = new Handler();
private final BroadcastReceiver mIntentReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
// Handle reciever
String mAction = intent.getAction();
if(mAction.equals(INCOMING_CALL_ACTION) {
// Do your thing
}
}
@Override
protected void onResume() {
super.onResume();
// Register Sync Recievers
IntentFilter intentToReceiveFilter = new IntentFilter();
intentToReceiveFilter.addAction(INCOMING_CALL_ACTION);
this.registerReceiver(mIntentReceiver, intentToReceiveFilter, null, mHandler);
mReceiversRegistered = true;
}
@Override
public void onPause() {
super.onPause();
// Make sure you unregister your receivers when you pause your activity
if(mReceiversRegistered) {
unregisterReceiver(mIntentReceiver);
mReceiversRegistered = false;
}
}
Затем вам также нужно будет добавить фильтр намерения в свой манифест:
<activity android:name=".MyActivity" android:label="@string/name" >
<intent-filter>
<action android:name="android.intent.action.PHONE_STATE" />
</intent-filter>
</activity>
вы можете создать внутренний класс
class A extends Activity {
BroadcastReceiver r = new BroadcastReceiver(){
// code to handle broadcase
}
}
, который будет получать события, которые вы можете передать основному обработчику, или просто вызвать некоторые внешние методы