Pregunta

Tengo un BroadcastReceiver que captura ACTION_NEW_OUTGOING_CALL eventos.

En el método onReceive () , estoy enviando el número proporcionado a un nuevo ListActivity , donde el usuario puede elegir varios números de destino nuevos de una lista.

Cuando el usuario selecciona un nuevo número de la lista, empiezo una nueva intención de ACTION_CALL con el nuevo número en el campo URI. Alternativamente, el resultado podría ser el número original.

Cualquiera que sea el nuevo número, debe marcarse de inmediato y no procesarse más.

¿Cómo puedo hacer que el BroadcastReceiver sepa que este número resultante no debería procesarse nuevamente?

¿Fue útil?

Solución

Resolví esto implementando un " Prefijo de omisión " en mi BroadcastReceiver . Si mi aplicación cliente quiere llamar a un número directamente, simplemente antepone el prefijo antes de invocar la intención ACTION_CALL .

Si el número marcado tiene el prefijo (codificado), el BroadcastReceiver elimina el prefijo y permite que la llamada continúe normalmente:

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

Esto resuelve dos problemas de una vez: esto no solo detiene el bucle de llamadas, sino que también me da una forma de evitar el procesamiento adicional de números específicos almacenando el prefijo en sus entradas de la guía telefónica.

Otros consejos

El método onReceive () en el receptor Broadcast recibe un Intent como argumento. Extraiga el paquete del intento usando Intent.getExtras (). Este paquete contiene 3 pares clave-valor de la siguiente manera:

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

98xxxxxx98 es el número marcado por el usuario.

Cuando se vuelve a llamar a onReceive (), este número cambia a 98xxxxxx98 * o 0 * Al verificar el asterisco (*) al final del número marcado, se puede inferir si se llama al método onReceive () por primera vez o las siguientes veces siguientes.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top