我有一项活动可以通过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>
答案 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>
答案 2 :(得分:0)
我遇到了类似的问题。 我不能使用
adb shell am start -a android.intent.action.CALL -d tel:12345
在我的真实手机上。但是它可以在仿真设备上工作。