Android - остановка событий NEW_OUTGOING_CALL из цикла?
Вопрос
У меня есть BroadcastReceiver
ловить ACTION_NEW_OUTGOING_CALL
Мероприятия.
В onReceive()
метод, которым я отправляю указанный номер на новый ListActivity
, где пользователь может выбирать различные новые номера назначения из списка.
Когда пользователь выбирает новый номер из списка, я запускаю новый ACTION_CALL
введите новый номер в поле URI.В качестве альтернативы результатом может быть исходное число.
Каким бы ни был новый номер, он должен быть набран немедленно и больше не обрабатываться.
Как я могу позволить этому BroadcastReceiver
знаете, что это результирующее число не должно обрабатываться еще раз?
Решение
Я решил эту проблему, внедрив "Обходной префикс" в свой BroadcastReceiver
.Если мое клиентское приложение хочет вызвать номер напрямую, оно просто добавляет префикс перед вызовом ACTION_CALL
Намерение.
Если набранный номер имеет (жестко закодированный) префикс, то BroadcastReceiver
удаляет префикс и позволяет вызову выполняться в обычном режиме:
public void onReceive(Context context, Intent intent)
{
String action = intent.getAction();
if (Intent.ACTION_NEW_OUTGOING_CALL.equals(action)) {
String number = getResultData();
if (number.startsWith(BYPASS_PREFIX)) {
setResultData(number.substring(BYPASS_PREFIX.length()));
} else {
// do additional processing
}
}
}
Это решает две проблемы сразу - это не только останавливает цикл вызовов, но и дает мне способ обойти дополнительную обработку для определенных номеров, сохранив префикс в записях их телефонной книги.
Другие советы
Метод onReceive() в широковещательном приемнике получает Intent в качестве аргумента.Извлеките пакет из Intent, используя Intent.getExtras().Этот пакет содержит 3 пары ключ-значение следующим образом :
- android.phone.extra.ALREADY_CALLED = null
- android.намерение.дополнительное.НОМЕР ТЕЛЕФОНА = 98хххххх98
- android.phone.extra.ORIGINAL_URI = телефон:98хххххх98
98хххххх98 это номер, набранный пользователем.
Когда onReceive() вызывается снова, это число изменяется на 98хххххх98* или 0* Проверяя наличие звездочки (*) в конце набранного номера, можно определить, вызывался ли метод onReceive() в первый раз или в последующие разы.