Перехват намерения ACTION_CALL в отношении HTC

У меня есть активность, чтобы поймать намерение ACTION_CALL помощью intent-filter и маршрута через мое приложение, которое отлично работает на устройствах Nexus one, Moto Blur и Samsung . Но не в смысле HTC. 🙁

Intent.ACTION_CALL_BUTTON вызывается, когда нажата ACTION_CALL кнопка HTC , но когда вы ACTION_CALL , не получен, на выходе журнала отображается сообщение android.intent.action.CALL .

 06-17 12:22:45.173: INFO/ActivityManager(83): Starting activity: Intent { act=android.intent.action.CALL dat=tel:00390642200001 flg=0x10000000 cmp=com.android.phone/.InCallScreen (has extras) } 

Я предполагаю, что это потому, что HTC поместила свой собственный дозвонщик, и он делает что-то смешное (возможно, с приоритетом фильтра приоритетов?).

Обновлено1: попытался установить приоритет на максимальное значение int, без изменений.

 <intent-filter android:priority="2147483647"> <action android:name="android.intent.action.MAIN" /> <action android:name="android.intent.action.CALL" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> 

Solutions Collecting From Web of "Перехват намерения ACTION_CALL в отношении HTC"

Вы можете удивить, но вы правы. Я сделал так много экспериментов по этой теме в HTC Desire, и я обнаружил, что HTC внес некоторые изменения либо в диспетчере пакетов, либо добавила вокруг себя некоторый wraper, поэтому всякий раз, когда мы добавляем активность, которая имеет действие CALL, она не добавляется с ACTION CALL. Они делают это только для действия CALL, а не для DIAL. Чтобы узнать это, я провел несколько экспериментов как:

1. Создал приложение, зарегистрированное в ACTION DIAL. Поэтому всякий раз, когда есть призыв к __ACTION_DIAL__ активности намерений, тогда HTC отображает два варианта: один для Dial свой, а другой – это моя деятельность. Еще один способ тестирования Dial – перейти в «История звонков» на телефоне HTC и выбрать любой телефонный номер или контакт и выбрать ** Изменить номер перед вызовом **. Это также отобразит два варианта выбора.

2. Поскольку они автоматически отключают функцию CALL, все остальные способы вызова выполняются путем взаимодействия с пользовательским интерфейсом HTC. Таким образом, я нашел другой способ вызова программным путем, и это использование <action android: name = "android.intent.action.CALL_PRIVILEGED" /> в моем файле манифеста. Но на этот раз из-за их изменений я не могу обработать действие вызова напрямую, но другой способ обработки CALL – это когда Android- файл ищет ACTION_CALL_PRIVILEGED . И, к счастью, я это нашел. Просто зайдите в People -> View Contact . Затем он показывает возможность вызова. В HTC Desire есть мобильный телефон . Поэтому нажмите и удерживайте эту опцию.

Bamm .. На этот раз HTC показывает вариант выбора одного из вариантов для вызова. Один из них свой, а другой, конечно, мой собственный.

Окончательный вывод: вы не можете обрабатывать CALL, но CALL_PRIVILEGED только в некоторых случаях. Чтобы убедиться, что используйте приложение skype на своем HTC и перейдите в раздел «Люди» – « Просмотр контактов», а затем нажмите и удерживайте вызов «Мобильный телефон / домашний», а затем отобразите диалоговое окно для выбора обработчика вызова.

Это должно сработать для вас

 <activity> <intent-filter> <action android:name="android.intent.action.CALL_PRIVILEGED" /> <category android:name="android.intent.category.DEFAULT" /> <data android:mimeType="vnd.android.cursor.item/phone" /> <data android:mimeType="vnd.android.cursor.item/phone_v2" /> <data android:mimeType="vnd.android.cursor.item/person" /> </intent-filter> </activity> 

Для режима подробно читать там