Перехват намерения ACTION_CALL в смысле HTC
У меня есть активность, чтобы поймать ACTION_CALL
намерение через intent-filter
и маршрут через мое приложение, которое отлично работает на устройствах Nexus One, Moto Blur и Samsung. Но не по смыслу HTC.:(
Intent.ACTION_CALL_BUTTON
вызывается, когда нажата сенсорная кнопка 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>
2 ответа
Вы можете удивить, но вы правы. Я провел очень много экспериментов на эту тему в HTC Desire и обнаружил, что HTC внесла некоторые изменения либо в диспетчере пакетов, либо добавила некоторые обертки вокруг этого, поэтому всякий раз, когда мы добавляем действие с действием CALL, оно не добавляется с помощью ACTION CALL. Они делают это только для действия CALL, а не для DIAL. Чтобы выяснить это, я провел несколько экспериментов:
1. Создано приложение, зарегистрированное в ACTION DIAL. Таким образом, всякий раз, когда происходит вызов намеренной активности __ACTION_DIAL__, HTC отображает две опции, одна из которых "Набирать" самостоятельно, а другая - "Моя активность". Другой способ проверки набора номера - перейти к истории вызовов в телефоне HTC, выбрать любой номер телефона или контакт и выбрать ** Изменить номер перед вызовом **. Это также будет отображать два варианта, чтобы выбрать один.
2. Поскольку они отключают функцию CALL программным способом, все остальные способы вызова выполняются путем взаимодействия с пользовательским интерфейсом HTC. Поэтому я нашел другой способ вызова программным способом, который заключается в использованииБамм.. На этот раз HTC показывает вариант, чтобы выбрать один вариант для вызова. Один свой, а другой, конечно, мой.
Окончательный вывод: вы не можете обрабатывать CALL, но CALL_PRIVILEGED только в некоторых случаях. Чтобы убедиться, что вы используете Skype приложение на вашем HTC и перейдите в People -> View Contact, а затем нажмите и удерживайте Call mobile/home, это также покажет диалоговое окно для выбора обработчика для Call.
Это должно работать для вас
<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>
Я встретил похожий вопрос. Я не могу использовать
adb shell am start -a android.intent.action.CALL -d tel:12345
на моем реальном телефоне. Но он может работать на устройстве эмуляции.