我们的应用需要成为默认拨号器应用(也称为:"默认电话处理程序"、"默认呼叫应用"),以便它能够根据 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
)。
知道如何在这些设备上显示默认呼叫应用程序对话框吗?
我们可以运行任何其他意图来帮助用户手动将我们的应用设置为默认调用应用吗?
一些谷歌搜索返回荣耀设备要求您在设置中更改默认拨号器应用程序,也许直接启动该设置页面的意图? 至于特定的设置页面参数,您必须检查荣誉设备
startActivityForResult(new Intent(android.provider.Settings.ACTION_SETTINGS), 0);
然后,您可以在应用程序中处理结果(通过检查拨号器现在是否默认),否则告诉用户失败
我在构建拨号器应用程序时遇到了同样的问题从发布 Q 安卓操作系统开始必须但此代码在电话中询问默认拨号器>= Q 安卓
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);
}
}
也许添加以下内容<intent-filter>
解决问题:
<intent-filter>
<action android:name="android.intent.action.DIAL" />
<category android:name="android.intent.category.DEFAULT" />
<data android:scheme="tel"/>
</intent-filter>