Перехватить входящий звонок в рутированном 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 и т. Д.