J'ai vu plusieurs exemples d'implémentation d'un BroadCastReceiver, mais comment dois-je implémenter un service qui doit réagir à une intention en attente (par exemple un appel téléphonique entrant) ... En fait je me posais des questions sur le même "problème" mais dans une activité .. Vous avez évidemment une classe qui étend un service ou une activité) de sorte qu'il ne peut pas également étendre BroadCastReceiver ... Il semble que nous ne pouvons pas faire des services "platform-aware" et/ou Des activités?Service et un BroadCastReceiver
Répondre
Pour enregistrer une activité à 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 aurez également besoin d'ajouter un filtre à votre intention 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 interne
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 tout simplement appeler des méthodes extérieures
Faut-il être une classe interne? – n611x007
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;
}
}
};
Puis dans la méthode onCreate:
mTelephonyManager = (TelephonyManager) getSystemService(TELEPHONY_SERVICE);
mTelephonyManager.listen(mPhoneStateListener, PhoneStateListener.LISTEN_CALL_STATE);
Enfin, vous effacez l'écouteur dans onDestroy:
mTelephonyManager.listen(mPhoneStateListener, PhoneStateListener.LISTEN_NONE);
Beaucoup plus simple dans ce cas.
- 1. Arrêter de regarder l'application en utilisant service et BroadcastReceiver
- 2. se liant à un service local d'un BroadcastReceiver
- 3. Quelle classe est appelée première activité, BroadcastReceiver ou Service?
- 4. Appel du service d'arrière-plan à partir de BroadcastReceiver
- 5. confondu avec BroadcastReceiver
- 6. BroadcastReceiver actif tout le temps
- 7. Android BroadcastReceiver attend le service pour démarrer ou transmettre WakeLock au service?
- 8. AlarmManager et BroadcastReceiver au lieu du service - est-ce mauvais? (Délai d'attente)
- 9. Redirection BroadcastReceiver onReceive()
- 10. BroadcastReceiver ne recevant pas l'intention
- 11. Réception d'actions de lecture MP3 dans un BroadcastReceiver sous Android
- 12. startActivity() de BroadcastReceiver
- 13. Faire une requête HttpClient dans un BroadcastReceiver pour Intent.ACTION_NEW_OUTGOING_CALL
- 14. Définir BroadcastReceiver pour être inactif
- 15. Passage d'arguments à un BroadcastReceiver via un Intention dans Android
- 16. Android: Pourquoi le BroadcastReceiver plante?
- 17. BroadcastReceiver ne reçoit pas une diffusion d'alarme
- 18. Android: BroadcastReceiver pour redémarrer l'application tuée/écrasée
- 19. Android - ne peut pas permettre BroadcastReceiver
- 20. BroadCastReceiver Force Fermer Pour Sms recevoir
- 21. Android BroadcastReceiver n'arrête pas l'action Camera Intent
- 22. Suppression des SMS en utilisant BroadcastReceiver - Android
- 23. Démarrer et arrêter un service
- 24. Deux threads et 1 service, ou un service par thread?
- 25. Comment établir une communication bidirectionnelle entre l'activité et le service dans un processus différent?
- 26. Mise à jour des informations météo, dois-je utiliser une alarme et/ou un service?
- 27. Impossible d'instancier une classe imbriquée (extends broadcastReceiver) quand un sendBroadcast est créé
- 28. consommer un service web .net et nsoperation
- 29. Android BroadcastReceiver ne peut recevoir aucun événement de diffusion
- 30. Service arrêtant un autre service
Si vous créez une nouvelle instance de BroadcastReceiver puis l'inscrivez dans votre code en fournissant un objet filtre d'intention, vous n'avez pas besoin de créer un dans votre définition d'activité dans le fichier manifeste. –
hara