要解决android.intent.action.CALL没有打开默认的拨号应用程序的问题,可以使用以下代码示例:
Intent intent = new Intent(Intent.ACTION_CALL);
intent.setData(Uri.parse("tel:" + phoneNumber));
PackageManager packageManager = getPackageManager();
List resolveInfoList = packageManager.queryIntentActivities(intent, 0);
// 检查是否有默认的拨号应用程序
if (resolveInfoList.size() > 0) {
// 有默认的拨号应用程序,直接启动拨号
startActivity(intent);
} else {
// 没有默认的拨号应用程序,显示选择器让用户选择拨号应用程序
Intent chooserIntent = Intent.createChooser(intent, "选择拨号应用程序");
if (chooserIntent.resolveActivity(packageManager) != null) {
startActivity(chooserIntent);
} else {
// 没有可用的拨号应用程序
Toast.makeText(this, "没有可用的拨号应用程序", Toast.LENGTH_SHORT).show();
}
}
这段代码首先创建一个ACTION_CALL的Intent,并设置电话号码。然后通过PackageManager的queryIntentActivities方法查询可以处理该Intent的应用程序列表。如果列表不为空,则说明有默认的拨号应用程序,直接启动拨号。如果列表为空,则显示一个选择器让用户选择拨号应用程序。如果选择器也没有可用的应用程序,则显示一个Toast提示用户没有可用的拨号应用程序。