【问题标题】:How can I add my application to the android default Dialer selection?如何将我的应用程序添加到 android 默认拨号器选择?
【发布时间】:2018-06-18 17:14:07
【问题描述】:

我的问题是如何在不使用 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>

但是 Google 最近发布了: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>

【问题讨论】:

  • ofcource 有效,但是谷歌不再允许它使用这个意图,你可以在我的问题中读到。跨度>

标签: android android-intent phone-call


【解决方案1】:
         <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" />

【讨论】:

  • 它不工作。所有呼叫都会立即打开本地拨号程序。我已经尝试过三星 8(OS 7.0)和 One+(6.0)。结果是一样的
【解决方案2】:

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

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

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

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

不管怎样,我收到了来自 Google 的相同电子邮件。 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>

【讨论】:

  • 感谢您的回复,我的应用程序中的拨号器和呼叫工作正常,但我的应用程序仍然没有显示在默认拨号器列表中。
  • 尝试将 CALL_BUTTON 添加到您的意图过滤器中。它在某些手机上发送,例如HTC,当用户点击大 CALL 按钮时。如果您的应用正在处理 ACTION_DIAL,我很确定您的应用会显示为拨号 - 通过单击网页上的电话号码或 Google 地图卡片进行检查。您不需要处理 CALL 或 CALL_PRIVILEGED 只是为了显示拨号器。
  • 我确实用我使用的意图更新了我的问题,但是在我的三星手机上捕获电话按钮不起作用,我错过了什么吗?
  • 谢谢阿米特,我会尽快尝试修复另一个错误。 (无法构建自动取款机)
  • 我试过你的代码,android没有要求我选择默认拨号器并立即打开本机拨号器。在多部手机上尝试过,但所有手机都显示相同的程序。有什么其他想法可以尝试吗?
【解决方案3】:

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

输入:如果没有,则启动一个空的拨号程序;否则 getData() 是要拨打的电话号码的 URI 或 tel: 明确电话号码的 URI。 ref: developer page

【讨论】:

  • 感谢您的回复,我已经将意图用于我的 mimetype。但我想将我的应用程序添加到默认拨号器选择列表中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-11-24
  • 2016-04-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-02
  • 1970-01-01
相关资源
最近更新 更多