J'ai actuellement un Service d'Android qui est un exemple de client de VOIP de sorte qu'il est à l'écoute pour des messages SIP et si il reçoit un il démarre une Activité à l'écran, avec les composants de l'INTERFACE utilisateur.
Ensuite, les messages SIP déterminer ce que l'Activité est à l'affichage sur l'écran. Par exemple, si un appel entrant, il affiche Répondre ou Rejeter ou un appel sortant, il affiche un écran de numérotation.
À la minute où je utiliser les Intentions de laisser l'Activité de savoir dans quel état elle doit afficher.
En voici un exemple:
Intent i = new Intent();
i.setAction(SIPEngine.SIP_TRYING_INTENT);
i.putExtra("com.net.INCOMING", true);
sendBroadcast(i);
Intent x = new Intent();
x.setAction(CallManager.SIP_INCOMING_CALL_INTENT);
sendBroadcast(x);
Log.d("INTENT SENT", "INTENT SENT INCOMING CALL AFTER PROCESSINVITE");
L'activité aura un récepteur de radiodiffusion inscrits pour ces intentions et passera son état selon la dernière volonté qu'il a reçu.
Exemple de code comme suit:
SipCallListener = new BroadcastReceiver(){
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if(SIPEngine.SIP_RINGING_INTENT.equals(action)){
Log.d("cda ", "Got RINGING action SIPENGINE");
ringingSetup();
}
if(CallManager.SIP_INCOMING_CALL_INTENT.equals(action)){
Log.d("cda ", "Got PHONE RINGING action");
incomingCallSetup();
}
}
};
IntentFilter filter = new IntentFilter(CallManager.SIP_INCOMING_CALL_INTENT);
filter.addAction(CallManager.SIP_RINGING_CALL_INTENT);
registerReceiver(SipCallListener, filter);
Cela fonctionne toutefois, il semble qu'il n'est pas très efficace, les Intentions obtenez une diffusion à l'échelle du système et les Intentions avoir à feu pour les différents états qui semble comme il pourrait devenir inefficace la plus-je inclure ainsi que l'ajout de complexité.
Donc je me demandais si il existe un autre plus efficace et plus propre façon de le faire?
Est-il un moyen de garder les Intentions de radiodiffusion uniquement à l'intérieur d'une application?
Serait rappels être une meilleure idée? Si oui, pourquoi et en quoi devraient-elles être appliquées?