Перехват намерения ACTION_CALL в смысле HTC - PullRequest
7 голосов
/ 17 июня 2011

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

Intent.ACTION_CALL_BUTTON вызывается, когда нажата кнопка HTC sense , но когда вы набрали 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 ]

4 голосов
/ 20 июня 2011

Вы можете удивить, но вы правы. Я провел много экспериментов на эту тему в 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 есть Звонок на мобильный . Так что нажмите и удерживайте эту опцию.

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

Окончательный вывод: вы не можете обрабатывать CALL, но CALL_PRIVILEGED только в некоторых случаях. Для этого воспользуйтесь приложением skype на своем HTC и перейдите на Люди -> Просмотр контакта , а затем нажмите и удерживайте Вызов на мобильный / домашний тогда это также показывает диалог выбора обработчика для Call.

0 голосов
/ 08 декабря 2011

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

<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>

подробности о режиме читайте там

...