Перехват намерения 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. Поэтому я нашел другой способ вызова программным способом, который заключается в использовании в моем файле манифеста. Но на этот раз из-за их изменений я не могу напрямую обработать действие Call, но другой способ обработки CALL - это когда Android ищет ACTION_CALL_PRIVILEGED. И, к счастью, я нашел это. Просто зайдите в Люди -> Посмотреть контакт. Затем он показывает возможность позвонить. В HTC Desire есть Call mobile. Так что нажмите и удерживайте эту опцию.

Бамм.. На этот раз 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

на моем реальном телефоне. Но он может работать на устройстве эмуляции.

Другие вопросы по тегам