para - interceptar la pantalla de llamadas entrantes del sistema operativo Android y reemplazar
configuración de llamadas entrantes (3)
Supongo que podrías haber hecho el 95% del trabajo. El problema de la pantalla no aparece, pero la llamada entrante del sistema se podría resolver de la siguiente manera:
Me gustaría interceptar la pantalla de llamadas entrantes del sistema operativo Android y reemplazarla con la pantalla de llamadas entrantes de mi aplicación. Sin embargo, no hay una API para hacerlo, pero estoy seguro de que es posible ya que 4 empresas implementaron esto; Las compañías de las que estoy hablando son: Adaffix (Yellix), Vringo, WhitePages Caller ID y más. Todos ellos reemplazan limpiamente la pantalla de llamadas entrantes del sistema operativo con la pantalla de llamadas entrantes de su aplicación a medida que la llamada llega (sin demora, sin fallos, siempre funciona).
Pude encontrar una solución parcial, pero esta solución no es estable, ya que a veces muestra la pantalla de llamadas entrantes de mi aplicación y otras veces la pantalla de llamadas entrantes del SO. Cada llamada reacciona de manera diferente.
¿Tiene alguna idea?
Tendrá que superponer la pantalla nativa con un control (tal vez un cuadro de diálogo) cuando obtenga android.intent.action.PHONE_STATE como timbre.
Debe registrar un BroadcastReceiver para la acción android.intent.action.PHONE_STATE.
El intento de recepción tendrá una variable TelephonyManager.EXTRA_STATE_RINGING que tendrá el estado actual.
¡Házmelo saber!
Debe interceptar la emisión de android.intent.action.PHONE_STATE
con la mayor prioridad posible, luego, si en BroadcastReceiver.onReceive()
cancelará la transmisión a través de BroadcastReceiver.abortBroadcast()
podrá detener la pantalla de llamada entrante predeterminada para que se muestre, ya que la aplicación por defecto no recibirá transmisión de llamadas entrantes. Después de eso, eres libre de mostrar tu propia Activity
.
Al menos la misma estrategia funciona con los SMS entrantes. Solía hacerlo como se describe anteriormente.