2

我的问题是如何在不使用 android.intent.action.CALL_PRIVILEGED 的情况下将我的应用程序添加到 android 默认拨号器选择中?

现在我在下面使用这段代码,这很好用:

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

3 回答 3

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”。同样需要在权限标签下方允许电话呼叫。启动器类别中的代码中缺少。

<uses-permission android:name="android.permission.CALL_PHONE" />
于 2013-06-18T17:35:29.387 回答
1

您不需要拦截 CALL_PRIVILEGED 来制作拨号器。有 3 个感兴趣的意图:

ACTION_DIAL:调用拨号程序。你应该拦截这个。

CALL:拨打电话。如果您通过 VoIP 路由呼叫,我想您需要拦截它,否则只需将其传递给系统。

CALL_PRIVILEGED:拨打紧急电话(美国为 911 等)。您无需拦截,因为这些呼叫是专门路由的,即使没有 SIM 卡,也不向用户收费。

对于它的价值,我从谷歌收到了同样的电子邮件。我的应用甚至不使用 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>
于 2013-05-16T13:26:20.453 回答
0

试试“android.intent.action.DIAL”。用户必须手动启动呼叫,但我认为这是最好的解决方案。

输入:如果没有,则启动一个空拨号器;否则 getData() 是要拨打的电话号码的 URI 或 tel: 明确电话号码的 URI。 参考:开发者页面

于 2013-05-16T13:05:11.990 回答