运行时
String ussdCode = "*" + "100" + Uri.encode("#");
startActivity(new Intent("android.intent.action.CALL", Uri.parse("tel:" + ussdCode)));
我希望能够完成正常的电话通话,但不是Skype会转到前面并拨打* 100#USSD代码。我从Skype退出,它将Skype带到了前面! 如何强制它使用普通电话而不是Skype?
答案 0 :(得分:3)
这是因为你有Skype作为通话的默认应用程序。这是一种设备配置。您可以更改它,但请注意,如果您这样做,它将实际更改该配置,因此Skype不再是您手机中的默认设置。
您可以清除调用此表单活动的默认应用程序
getPackageManager().clearPackagePreferredActivities(PACKAGENAME);
skype的包名是com.skype.raider,所以在你的情况下你称之为
getPackageManager().clearPackagePreferredActivities("com.skype.raider");
当然你在调用startActivity
之前调用它<强>更新强>
我记得如果您不想重置默认配置,可以尝试强制一个应用程序处理您发送给startActivity的意图。但是你有一个问题,你必须知道应用程序的包名称,以及应该处理它的活动。在某些情况下很容易找到,但在其他一些情况下它不会。我一直在谷歌搜索默认的Android拨号器的这个信息,也看了我的设备,但我没有找到任何东西。无论如何,如果你能找到它,你可以使用下面的代码,它会更好,因为它不会改变任何设置。你也可以记住它,因为它在其他情况下很方便:
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();
}