7

我有一个 Activity 来捕捉ACTION_CALL意图intent-filter并通过我的应用程序进行路由,该应用程序在Nexus one、Moto Blur 和 Samsung 设备上运行良好。但对HTC 没有意义。:(

按下HTC 感应按钮但未收到拨号时Intent.ACTION_CALL_BUTTON调用,日志输出显示已发送。ACTION_CALLandroid.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>
4

3 回答 3

4

你可能会感到惊讶,但你是对的。我在 HTC Desire 上对这个主题做了很多实验,我发现 HTC 在包管理器中做了一些更改或添加了一些包装器,所以每当我们添加具有动作调用的活动时,它就不会添加动作调用。他们这样做只是为了 CALL 动作而不是 DIAL。为了弄清楚这一点,我做了一些实验:

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

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

Bamm.. 这次 HTC 显示了选择一个选项来调用的选项。一个是它自己的,另一个当然是我自己的。

最后的结论是你不能处理 CALL 但只能在某些情况下处理 CALL_PRIVILEGED 。要确保在您的 HTC 上使用Skype应用程序,然后转到“人员” -> “查看联系人”,然后按住Call mobile/home,然后这还会显示选择呼叫处理程序的对话框。

于 2011-06-20T15:34:30.633 回答
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>

有关模式详细信息,请阅读那里

于 2011-12-08T15:54:06.677 回答
0

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

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

在我的真实手机上。但它可以在仿真设备上运行。

于 2020-01-10T02:50:09.263 回答