当运行这个
String ussdCode = "*" + "100" + Uri.encode("#");
startActivity(new Intent("android.intent.action.CALL", Uri.parse("tel:" + ussdCode)));
我希望可以进行正常的电话通话,但不是 Skype 而是转到前面并拨打 *100# USSD 代码。我从 Skype 注销,它仍然把 Skype 带到了前面!
如何强制它使用普通电话而不是Skype?
那是因为您将 Skype 作为默认的通话应用程序。这是设备配置。您可以更改它,但请注意,如果您这样做了,它实际上会更改该配置,因此Skype 将不再是您手机中的默认设置。
您可以清除调用此表单的默认应用程序您的活动
getPackageManager().clearPackagePreferredActivities(PACKAGENAME);
skype 的包名称是 com.skype.raider,所以在你的情况下你称之为
getPackageManager().clearPackagePreferredActivities("com.skype.raider");
当然你在调用 startActivity 之前调用它
更新
我记得如果你不想重置默认配置,你可以尝试强制一个应用处理你发送给 startActivity 的意图。但是你有一个问题,你必须知道应用程序的包名,以及应该处理它的活动。在某些情况下很容易找到,但在其他情况下则不会。我一直在谷歌上搜索默认安卓拨号器的信息,也查看了我的设备,但我什么也没找到。无论如何,如果你能找到它,你可以使用下面的代码,它会更好,因为它不会改变任何设置。您也可以记住它,因为它在其他情况下可能很方便:
Intent intent = new Intent();
intent.setComponent(new ComponentName("PACKAGE_NAME","PACKAGENAME.ACTIVITY_NAME"));
intent.setAction("android.intent.action.VIEW");
intent.addCategory("android.intent.category.BROWSABLE");
Uri uri = Uri.parse(url);
intent.setData(uri);
try
{
startActivity(intent);
}
catch (Exception e)
{
e.printStackTrace();
}