4

我们的应用需要成为默认的拨号器应用(也称为:“默认电话处理程序”、“默认呼叫应用”),以便它能够在 Android 的新权限策略下拨打电话。

我们使用以下意图显示一个系统对话框,要求用户将我们的应用设为默认:

Intent intent = new Intent(TelecomManager.ACTION_CHANGE_DEFAULT_DIALER);
intent.putExtra(TelecomManager.EXTRA_CHANGE_DEFAULT_DIALER_PACKAGE_NAME, getPackageName());
startActivityForResult(intent, RC_DEFAULT_PHONE);  

这适用于我们所有的测试设备,显然对大多数用户而言,但不显示任何对话框并立即返回RESULT_CANCELED某些设备的结果代码。

通过查看报告,似乎大多数(如果不是所有)报告都来自Huawei设备(以及来自Huawei的品牌 - Honor)。

知道如何在这些设备上显示默认呼叫应用程序对话框吗?
我们可以运行任何其他意图来帮助用户手动将我们的应用程序设置为默认调用应用程序?

4

3 回答 3

0

一些谷歌搜索返回该荣誉设备要求您更改设置中的默认拨号应用程序,也许直接启动该设置页面的意图?至于特定的设置页面参数,您必须检查荣誉设备

startActivityForResult(new Intent(android.provider.Settings.ACTION_SETTINGS), 0);

然后你可以在你的应用程序中处理结果(通过检查你的拨号器现在是否是默认的)否则告诉用户失败

于 2019-01-15T12:02:30.260 回答
0

我在构建拨号器应用程序时遇到了同样的问题,从发布 Q android os must 但是这个代码询问电话中的默认拨号器> = Q android

private static final int CHANGE_DEFAULT_DIALER_CODE =25 ;

private void offerReplacingDefaultDialer() {
    if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.M){
        Intent intent = new Intent(TelecomManager.ACTION_CHANGE_DEFAULT_DIALER);
        intent.putExtra(TelecomManager.EXTRA_CHANGE_DEFAULT_DIALER_PACKAGE_NAME,
                this.getPackageName());
        startActivity(intent);

    }
    if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q){
        RoleManager roleManager = (RoleManager) getSystemService(ROLE_SERVICE);
        Intent intent = roleManager.createRequestRoleIntent(RoleManager.ROLE_DIALER);
        startActivityForResult(intent, CHANGE_DEFAULT_DIALER_CODE);
    }
}
于 2022-02-12T18:49:31.603 回答
-1

也许添加以下<intent-filter>解决问题:

<intent-filter>
      <action android:name="android.intent.action.DIAL" />
      <category android:name="android.intent.category.DEFAULT" />
      <data android:scheme="tel"/>
</intent-filter>
于 2019-09-12T06:45:52.310 回答