2012-01-25 4 views
17

Я бы хотел перехватить экран входящих вызовов ОС Android и заменить его экраном входящих вызовов моего приложения. Однако для этого нет API, но я точно знаю, что это возможно, поскольку это было реализовано 4 различными компаниями; Компании, о которых я говорю, являются: Adaffix (Yellix), Vringo, WhitePages Caller ID и многое другое. Все они полностью заменяют экран входящего вызова ОС на экран входящего вызова приложения при поступлении вызова (без задержки, без сбоев, он всегда работает).перехватите экран входящих вызовов ОС Android и замените

Мне удалось найти частичное решение, но это решение нестабильно, поскольку иногда оно отображает экран входящих вызовов приложения, а иногда и экран входящего вызова ОС. каждый из них реагирует по-разному.

У вас есть идея?

+0

+1 за хороший вопрос – Lucifer

+0

+1 Добро пожаловать в SO! – barmaley

ответ

6

Вам нужно будет наложить собственный экран с помощью элемента управления (возможно, диалогового окна), когда вы получите андроид.intent.action.PHONE_STATE как звонок.

Вы должны зарегистрировать BroadcastReceiver для действия android.intent.action.PHONE_STATE.

У принимающего намерения будет переменная TelephonyManager.EXTRA_STATE_RINGING, которая будет иметь текущее состояние.

Дайте мне знать!

2

Вы должны перехватывать вещания android.intent.action.PHONE_STATE с максимально возможным приоритетом, а затем, если в вашем BroadcastReceiver.onReceive() вы будете отменить трансляцию через BroadcastReceiver.abortBroadcast() вы будете в состоянии остановить по умолчанию экрана входящего вызова будет показаны, так как приложение по умолчанию не будет принимать входящий вызов трансляции , После этого вы можете бесплатно показать свои Activity.

По крайней мере, та же стратегия работает с входящими SMS '- я делал так, как описано выше.

+2

Просто обратите внимание, что это не работает для передачи вызова, поскольку широковещательная передача - это не упорядоченная трансляция - вы получаете эту ошибку «java.lang.RuntimeException: BroadcastReceiver пытается вернуть результат во время нестандартной передачи» –

Смежные вопросы