Служба и BroadCastReceiver

Я видел несколько примеров того, как реализовать BroadCastReceiver, но как я должен реализовать Сервис, который должен реагировать на некоторое незаконченное Намерение (например, входящий телефонный вызов)... На самом деле я задавался вопросом о той же "проблеме", но в Действии.. У Вас, очевидно, есть класс, который расширяет Обслуживание или Действие), таким образом, это не может также расширить BroadCastReceiver... Похоже, что мы не можем сделать "осведомленные о платформе" службы и/или Activties?

9
задан Dandre Allison 20 January 2012 в 19:18
поделиться

2 ответа

Чтобы зарегистрировать действие для получения определенного намерения, вам необходимо:

// 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>
12
ответ дан 4 December 2019 в 10:30
поделиться

вы можете создать внутренний класс

class A extends Activity {
 BroadcastReceiver r = new BroadcastReceiver(){
   // code to handle broadcase
 }
}

, который будет получать события, которые вы можете передать основному обработчику, или просто вызвать некоторые внешние методы

4
ответ дан 4 December 2019 в 10:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: