2012-01-25 15 views
17

Vorrei intercettare la schermata della chiamata in entrata del sistema operativo Android e sostituirla con la schermata della chiamata in arrivo della mia app. Tuttavia, non ci sono API per farlo, ma so per certo che è possibile perché 4 società diverse lo hanno implementato; Le società di cui sto parlando sono: Adaffix (Yellix), Vringo, WhitePages Caller ID e altro ancora. Sostituiscono in modo pulito la schermata della chiamata in arrivo del sistema operativo con la schermata della chiamata in entrata dell'app mentre arriva la chiamata (nessun ritardo, nessun problema tecnico, funziona sempre).intercetta la schermata della chiamata in entrata del sistema operativo Android e sostituisce

Sono stato in grado di trovare una soluzione parziale, ma questa soluzione non è stabile, perché a volte viene visualizzata la schermata della chiamata in entrata della app e, a volte, la schermata della chiamata in entrata del sistema operativo. ogni chiamata reagisce in modo diverso.

Avete qualche idea?

+0

+1 per bella domanda – Lucifer

+0

+1 benvenuto a SO! – barmaley

risposta

6

Dovrai sovrapporre la schermata nativa con un controllo (forse una finestra di dialogo) quando suona android.intent.action.PHONE_STATE.

È necessario registrare un BroadcastReceiver per l'azione android.intent.action.PHONE_STATE.

L'intento di ricezione avrà una variabile TelephonyManager.EXTRA_STATE_RINGING che avrà lo stato corrente.

Fammi sapere!

2

È necessario intercettare trasmettere android.intent.action.PHONE_STATE con la massima priorità possibile, allora, se nella vostra BroadcastReceiver.onReceive() si annulla la trasmissione attraverso BroadcastReceiver.abortBroadcast() si sarà in grado di fermare schermata chiamata in arrivo predefinita per essere mostrato, dal momento che l'applicazione di default non riceverà trasmissione chiamata in arrivo . Dopodiché sei libero di mostrare il tuo Activity.

Almeno la stessa strategia funziona con gli SMS in arrivo "- Ho usato come descritto sopra.

+2

Solo per notare, questo non funziona per passare una chiamata poiché la trasmissione è una trasmissione non ordinata - si ottiene questo errore "java.lang.RuntimeException: BroadcastReceiver che tenta di restituire il risultato durante una trasmissione non ordinata" –

Problemi correlati