Service et un BroadCastReceiver

J'ai vu plusieurs exemples de la façon de mettre en œuvre un BroadCastReceiver, mais comment mettre en œuvre un service qui doit réagir à une intention en attente (par exemple, un appel entrant) … En fait, je me demandais le même "problème", mais dans un Activité … Vous avez évidemment une classe qui étend un service ou une activité) afin qu'il ne puisse pas étendre BroadCastReceiver … Il semble que nous ne pouvons pas créer des services et / ou des activités actives pour la plate-forme.

  • Android comment puis-je attendre jusqu'à ce qu'un service soit effectivement connecté?
  • Gestion des rappels de service à distance
  • Différence entre BOOT_COMPLETED et QUICKBOOT_POWERON sur Android
  • BroadcastReceiver vs Service
  • Dans Android: Comment appeler la fonction d'activité d'un service?
  • Exception Android ClassCast lors de la liaison au service
  • 3 Solutions collect form web for “Service et un BroadCastReceiver”

    Pour enregistrer une activité pour recevoir une certaine intention, vous devez:

    // 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; } } 

    Ensuite, vous devrez ajouter un filtre d'intention à votre manifeste:

      <activity android:name=".MyActivity" android:label="@string/name" > <intent-filter> <action android:name="android.intent.action.PHONE_STATE" /> </intent-filter> </activity> 

    Vous pouvez créer une classe intérieure

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

    Cette classe recevra des événements, que vous pouvez passer au gestionnaire principal, ou simplement appeler des méthodes externes

    En fait, vous pouvez réagir à l'appel téléphonique entrant simplement en ajoutant l'auditeur à TelephonyManager

    Vous définissez PhoneStateListener dans votre Service / Activité

     private PhoneStateListener mPhoneStateListener = new PhoneStateListener() { @Override public void onCallStateChanged(int state, String incomingNumber) { super.onCallStateChanged(state, incomingNumber); switch (state) { case TelephonyManager.CALL_STATE_OFFHOOK: break; case TelephonyManager.CALL_STATE_RINGING: break; case TelephonyManager.CALL_STATE_IDLE: break; } } }; 

    Ensuite, dans la méthode onCreate:

     mTelephonyManager = (TelephonyManager) getSystemService(TELEPHONY_SERVICE); mTelephonyManager.listen(mPhoneStateListener, PhoneStateListener.LISTEN_CALL_STATE); 

    Finalement, vous effacez l'auditeur sur Destroy:

     mTelephonyManager.listen(mPhoneStateListener, PhoneStateListener.LISTEN_NONE); 

    Plus simple dans ce cas.

    coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.