Question

J'ai un BroadcastReceiver capturant des événements ACTION_NEW_OUTGOING_CALL .

Dans la méthode onReceive () , j'envoie le numéro fourni à un nouveau ListActivity , où l'utilisateur doit choisir divers nouveaux numéros de destination dans une liste.

Lorsque l'utilisateur sélectionne un nouveau numéro dans la liste, je commence une nouvelle intention ACTION_CALL avec le nouveau numéro dans le champ URI. Sinon, le résultat pourrait être le numéro d'origine.

Quel que soit le nouveau numéro, il doit être composé immédiatement et ne plus être traité.

Comment puis-je informer le BroadcastReceiver que ce numéro résultant ne doit plus être traité?

Était-ce utile?

La solution

J'ai résolu ce problème en mettant en œuvre un "préfixe de contournement". dans mon BroadcastReceiver . Si mon application client souhaite appeler directement un numéro, elle ajoute simplement le préfixe avant d'appeler l'intention ACTION_CALL .

Si le numéro composé porte le préfixe (codé en dur), le BroadcastReceiver supprime le préfixe et permet à l'appel de se dérouler normalement:

public void onReceive(Context context, Intent intent)
{
    String action = intent.getAction();
    if (Intent.ACTION_NEW_OUTGOING_CALL.equals(action)) {
        String number = getResultData();
        if (number.startsWith(BYPASS_PREFIX)) {
             setResultData(number.substring(BYPASS_PREFIX.length()));
        } else {
             // do additional processing
        }
    }
}

Cela résout deux problèmes en une fois. Non seulement cela arrête la mise en boucle des appels, cela me permet également de contourner le traitement supplémentaire pour des numéros spécifiques en stockant le préfixe dans leurs entrées d'annuaire.

Autres conseils

La méthode onReceive () dans Broadcast receiver reçoit Intent en tant qu'argument. Extrayez le paquet de l'intention à l'aide de Intent.getExtras (). Cet ensemble contient 3 paires clé-valeur comme suit:

  1. android.phone.extra.ALREADY_CALLED = null
  2. android.intent.extra.PHONE_NUMBER = 98xxxxxx98
  3. android.phone.extra.ORIGINAL_URI = tel: 98xxxxxx98

98xxxxxx98 est le numéro composé par l'utilisateur.

Lorsque la fonction onReceive () est appelée à nouveau, ce numéro devient 98xxxxxx98 * ou 0 * En recherchant l'astérisque (*) à la fin du numéro composé, vous pourrez en déduire si la méthode onReceive () est appelée pour la première fois ou les fois suivantes.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top