Android - остановка событий NEW_OUTGOING_CALL из цикла?

StackOverflow https://stackoverflow.com/questions/808645

  •  03-07-2019
  •  | 
  •  

Вопрос

У меня есть 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 пары ключ-значение следующим образом :

  1. android.phone.extra.ALREADY_CALLED = null
  2. android.намерение.дополнительное.НОМЕР ТЕЛЕФОНА = 98хххххх98
  3. android.phone.extra.ORIGINAL_URI = телефон:98хххххх98

98хххххх98 это номер, набранный пользователем.

Когда onReceive() вызывается снова, это число изменяется на 98хххххх98* или 0* Проверяя наличие звездочки (*) в конце набранного номера, можно определить, вызывался ли метод onReceive() в первый раз или в последующие разы.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top