Android - остановить NEW_OUTGOING_CALL события из цикла? - PullRequest
3 голосов
/ 30 апреля 2009

У меня BroadcastReceiver перехват ACTION_NEW_OUTGOING_CALL событий.

В методе onReceive() я отправляю предоставленный номер на новый ListActivity, где пользователь может выбирать различные новые номера назначения из списка.

Когда пользователь выбирает новый номер из списка, я начинаю новое намерение ACTION_CALL с новым номером в поле URI. В качестве альтернативы результатом может быть исходное число.

Каким бы ни был новый номер, он должен быть набран немедленно и больше не обрабатываться.

Как я могу сообщить BroadcastReceiver, что полученное в результате число больше не обрабатывается?

Ответы [ 2 ]

6 голосов
/ 30 ноября 2009

Я решил эту проблему, внедрив «Обходной префикс» в моем BroadcastReceiver. Если мое клиентское приложение хочет позвонить по номеру напрямую, оно просто добавляет префикс перед вызовом ACTION_CALL Intent.

Если набранный номер имеет префикс (с жестким кодированием), 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
        }
    }
}

Это решает две проблемы за один раз - это не только останавливает зацикливание вызовов, но и дает мне возможность обойти дополнительную обработку для определенных номеров, сохраняя префикс в записях их телефонной книги.

0 голосов
/ 13 августа 2013

Метод onReceive () в приемнике Broadcast получает Intent в качестве аргумента. Извлеките Пакет из Намерения, используя Intent.getExtras (). Этот Пакет содержит 3 пары ключ-значение следующим образом:

  1. android.phone.extra.ALREADY_CALLED = null
  2. android.intent.extra.PHONE_NUMBER = 98xxxxxx98
  3. android.phone.extra.ORIGINAL_URI = тел: 98xxxxxx98

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...