拦截对HTC感知的ACTION_CALL意图

时间:2011-06-17 11:36:37

标签: android intentfilter htcsense

我有一项活动可以通过ACTION_CALL抓住intent-filter意图并通过我的应用路由,该工具适用于 Nexus one,Moto Blur和Samsung设备。但不是 HTC意义。 :(

HTC sense 按钮时调用Intent.ACTION_CALL_BUTTON但未收到您拨打的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已经把他们自己的感觉拨号器和它做了一些有趣的事情(可能有意图过滤器优先级?)。

Updated1:尝试将优先级设置为max 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>

3 个答案:

答案 0 :(得分:4)

你可能会感到惊讶,但你是对的。我已经在HTC Desire上做了很多关于这个主题的实验,我发现HTC在包管理器中做了一些改变,或者添加了一些包装器,所以每当我们添加具有动作CALL的活动时,它就不会添加ACTION CALL。 他们只为CALL动作而不是DIAL执行此操作。为了找到这个,我做了一些实验:

1.创建了使用ACTION DIAL注册的应用程序。 因此,每当调用__ACTION_DIAL__意图活动时,HTC会显示两个选项,一个用于拨打自己的,另一个用于我的活动。 测试拨号的另一种方法是转到HTC电话中的呼叫历史记录并选择任何电话号码或联系人,然后在拨打**之前选择**编号。这也将显示两个选项。

2.由于它们以编程方式禁用了CALL功能,因此所有其他调用方式都是通过与HTC的UI交互来完成的。所以我找到了另一种以编程方式调用的方法,即使用&lt; action android:name =&#34; android.intent.action.CALL_PRIVILEGED&#34; /> 在我的清单文件中。但是这一次由于他们的改变我不能直接处理Call动作,但另一种处理CALL的方法是当android寻找 ACTION_CALL_PRIVILEGED 时。幸运的是我找到了。 只需转到 - &gt; 查看联系人。然后它显示调用选项。在HTC Desire中有呼叫移动。所以按住该选项。

Bamm ..这次HTC显示选择一个选项进行调用的选项。一个是它自己的,另一个是我自己的。

最后的结论是,在某些情况下,您无法处理CALL但只能处理CALL_PRIVILEGED。 要确保在HTC上使用 skype 应用程序并转到 - &gt; 查看联系人,然后按住呼叫移动/主页,这也会显示选择呼叫处理程序的对话框。

答案 1 :(得分:0)

它应该适合你

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

for mode detail read there

答案 2 :(得分:0)

我遇到了类似的问题。 我不能使用

adb shell am start -a android.intent.action.CALL -d tel:12345

在我的真实手机上。但是它可以在仿真设备上工作。