我的问题是如何将我的应用程序添加到Android默认拨号器选择中,更具体而不使用android.intent.action.CALL_PRIVILEGED?
现在我使用下面的代码,这很好用:
<intent-filter>
<action android:name="android.intent.action.CALL_PRIVILEGED" />
<category android:name="android.intent.category.DEFAULT" />
<data android:scheme="tel" />
</intent-filter>
然而谷歌最近发布了:http://productforums.google.com/forum/#!topic/mobile/wXqnbynsL8Y
并将其邮寄给使用意图android.intent.action.CALL_PRIVILEGED的程序:
问题: 您的应用程序的用户可能无法进行紧急情况 如果他们选择了,可以通过系统电话拨号器拨打电话 你的申请路线电话。如文档中所述, 侦听CALL_PRIVILEGED Intent操作的应用程序将会 从系统拦截紧急服务电话,但可能无法 正确地路由它们。请注意,CALL_PRIVILEGED是一个 受限API,不适用于第三方应用程序 无法正确拨打紧急电话。
解决方案:
•从Java代码和AndroidManifest.xml中的Intent过滤器中删除CALL_PRIVILEGED。 •更新您的Google Play列表 说明包含使用您的应用作为默认值的声明 拨号器可能会干扰拨打911紧急服务。
我要删除的最简单的解决方案,但应用程序将使用功能。但是有另一种方法将应用程序添加到默认的拨号器选择中吗?但是没有CALL_PRIVILEGED意图吗?
提前致谢
只是默认拨号器选择的一个示例
编辑:
我使用的其他意图:
<intent-filter>
<action android:name="android.intent.action.CALL_BUTTON" />
<category android:name="android.intent.category.DEFAULT" />
<data android:scheme="tel"/>
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.DIAL" />
<category android:name="android.intent.category.DEFAULT" />
<data android:scheme="tel"/>
</intent-filter>
答案 0 :(得分:3)
<intent-filter>
<action android:name="android.intent.action.CALL_PRIVILEGED" />
<category android:name="android.intent.category.LAUNCHER" />
<category android:name="android.intent.category.DEFAULT" />
<data android:scheme="tel" />
</intent-filter>
更重要的是,在意图过滤器中需要特权调用操作,数据为uri的“tel”。 以下权限标记也需要允许拨打电话。 在类别Launcher中的代码中丢失。
<uses-permission android:name="android.permission.CALL_PHONE" />
答案 1 :(得分:1)
您无需拦截CALL_PRIVILEGED即可制作拨号程序。有3种意图:
ACTION_DIAL:调用拨号器。你应该拦截这个。
CALL:拨打电话。如果您通过VoIP路由呼叫,我想您需要拦截此情况,否则只需将其传递给系统。
CALL_PRIVILEGED:发出紧急电话(美国911等)。你不需要拦截这个,因为即使没有SIM卡,这些呼叫也是专门路由的,而且不会向用户收费。
对于它的价值,我从谷歌收到了同样的电子邮件。 My app甚至不使用CALL或CALL_PRIVILEGED意图。但是,在代码中检查传递的意图不是此操作(仅为了完整性)。所以,我认为他们只是扫描apk的数据部分,看看这个字符串是否在任何地方使用。
编辑试试这个,它适用于我的应用:
<activity android:name=".ActivityName"
android:label="@string/activity_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<action android:name="android.intent.action.DIAL" />
<action android:name="android.intent.action.CALL_BUTTON" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity-alias android:targetActivity="fully.qualified.ActivityName"
android:name="fully.qualified.ActivityName_HTC_hack"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<action android:name="android.intent.action.DIAL" />
<data android:scheme="tel" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
</intent-filter>
</activity-alias>
答案 2 :(得分:0)
尝试“android.intent.action.DIAL”。用户必须手动启动呼叫,但我认为这是最佳解决方案。
输入:如果没有,则启动空拨号器; else getData()是要拨打的电话号码的URI或显式电话号码的tel:URI。 ref: developer page