Перехватить входящий звонок в рутированном Android (Jelly Bean)

Я пытаюсь перехватить звонки, чтобы заблокировать все звонки с номеров, не сохраненных в Контактах, и чтобы избежать всех видов уведомлений, установленных по умолчанию приложением Телефон - в строке состояния, на ее значке (количество пропущенных звонков) и т. Д.

Все устройства Samsung Galaxy Core Duos, поэтому у меня есть режим блокировки как нежелательный способ блокировки всех звонков с номеров, не сохраненных в Контактах. Моя главная проблема - найти способ отключить (избежать) вышеупомянутые уведомления. Я знаю, что могу очистить свой журнал вызовов, и я делаю это, но уведомления остаются, как в строке состояния, так и на значке. Это сказанное, я полагаю, или оба или ни один не могут быть решены.

Есть ли способ сделать это для корневых устройств, работающих под управлением Jelly Bean?

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

Насколько я понимаю, сделать мою цель невозможной, возможно, вещи начинают происходить еще до трансляции. Кроме того, ничего "юридически приемлемого" не происходит до вызова sendBroadcast(), как подробно пока кратко описано в этом сообщении в блоге. Кстати, этот пост был представлен в 2009 году. Изменилось ли что-нибудь, связанное с этой проблемой, с тех пор?

Можно ли решить это с помощью оболочки? Если да, то как?

Код, который очищает журнал вызовов, выглядит следующим образом:

context.getContentResolver().delete(android.provider.CallLog.Calls.CONTENT_URI, null, null);

У меня есть необходимые разрешения (например: WRITE_CALL_LOG, READ_CONTACTS, WRITE_CONTACTS) и это работает. Журнал вызовов показывает, что он пуст, когда я касаюсь значка приложения "Телефон" или уведомления в строке состояния.

1 ответ

Решение

Я решил это, используя этот кусок кода:

Runtime runtime = Runtime.getRuntime();
try
{
    runtime.exec("service call phone 5 \n");
}
catch (Exception e)
{
    e.printStackTrace();
}

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

Если 5 не работает, попробуйте другие цифры, такие как 4, 6, 8 и т. Д.

Другие вопросы по тегам