Изменить номер для исходящего звонка, добавить префикс - PullRequest
3 голосов
/ 19 февраля 2011

Согласно этому посту на блоге разработчиков Android, можно изменить номер исходящего звонка: http://android -developers.blogspot.com / 2011/01 / processing-order-broadcasts.html

Проблема в том, что он не работает для меня, мой код:

String action = intent.getAction();
if (Intent.ACTION_NEW_OUTGOING_CALL.equals(action)) {
    // Try to read the phone number from previous receivers.
    String phonenumber = getResultData();

    if (phonenumber == null) {
        // We could not find any previous data. Use the original
        // phone
        // number in this case.
        phonenumber = intent
                .getStringExtra(Intent.EXTRA_PHONE_NUMBER);
    }

        String reformatedNumber = reformatNumber(phonenumber);
    setResultData(reformatedNumber);                                
}

Несмотря на то, что я переформатирую номер, набираемый номер телефона является вызываемым.

Любое понимание?

У меня есть эти разрешения в моем манифесте:

<uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS" />
<uses-permission android:name="android.permission.CALL_PHONE" />
<uses-permission android:name="android.permission.CALL_PRIVILEGED" />

Странно, что, когда я звоню, я набираю номер, который не хранится в телефонной книге, у меня естьСлужба, которая пытается выяснить, кому я звоню, и мне нужно нажать кнопку «Позвонить» в диалоговом окне, чтобы завершить звонок.Тогда мой код работает, но когда я звоню кому-то из телефонной книги или отключаю сервис поиска, он не работает.

Ответы [ 2 ]

2 голосов
/ 19 февраля 2011

В блоге вы упоминаете:

На самом деле мы наблюдали телефоны с приемник с приоритетом 0 для Установлено намерение NEW_OUTGOING_CALL из коробки (это будет последний что называется после всех других), что полностью игнорирует предыдущий результат данные, которые означают, что, по сути, они отключить любую полезную обработку ACTION_NEW_OUTGOING_CALL (кроме отмена звонка, который все равно Работа). Единственный обходной путь для этого чтобы ваш ресивер работал с приоритетом 0, который работает из-за особенностей работает 2 приемника одновременно приоритет, но, делая это, вы нарушаете одно из немногих явных правил для обработка исходящих звонков:

«Для согласованности, любой получатель которого цель состоит в том, чтобы запретить телефонные звонки должен иметь приоритет 0, чтобы обеспечить он увидит окончательный номер телефона быть набранным Любой получатель, цель которого переписать номера телефонов, чтобы быть звонил должен иметь положительный приоритет. Отрицательные приоритеты зарезервировано для системы для этого вещания; их использование может привести к проблемы».

Возможно ли, что вы сталкиваетесь с тем фактом, что код вашего телефона игнорируется намерением, установленным поставщиком с приоритетом 0? Вы можете проверить это, установив приоритет 0.

1 голос
/ 19 февраля 2011

Может быть, это проблема порядка: система получает заказанную трансляцию перед вашим кодом, поэтому изменения не влияют.

Попробуйте изменить атрибут android:priority для элемента <intent-filter> в манифесте, чтобы увидеть, имеет ли он какое-либо значение.

...