4

我有以下代码,我从对话框片段按钮开始:

 uri = "tel:"+ServerDialogCallUs.this.contents.getString("phone_number");
 Intent intent = new Intent(Intent.ACTION_CALL);
 intent.setData(Uri.parse(uri));

此代码不会拨打普通电话,而是启动 Skype 通话。如何让用户选择在正常通话和 Skype 通话之间进行选择。谢谢

4

6 回答 6

20

实际上,我错过了许可:

 <uses-permission android:name="android.permission.CALL_PHONE" />

将此权限添加到清单后,我可以在普通呼叫和 Skype 呼叫之间进行选择。谢谢

于 2013-08-20T15:31:23.920 回答
4

尝试调用 setPackage() 方法,工作正常:

Intent intent = new Intent(Intent.ACTION_CALL);
intent.setPackage("com.android.phone");
intent.setData(Uri.parse("tel:" + number));
startActitivy(intent);
于 2014-01-08T11:04:52.173 回答
2

有同样的问题并尝试了一些答案:

  1. Intent.ACTION_CALL 将调用,这可能需要正确的权限,但使用 Intent.ACTION_DIAL 并使用 Intent 选择器,我得到了正确的行为。
  2. 关于像“* 123 * 03#”这样的USSD,它在这种情况下也作为问题弹出,android说,它无法处理意图

2.1。Uri.encode("#") 不是解决方案,它只是在电话号码上添加一个“23”

2.2. Skype 处理号码错误,它添加了 +001 之类的国家代码。所以 Skype 不能正确处理 USSD。但似乎,我没有机会排除这一点。

所以我做了:

final Intent intent = new Intent();
intent.setAction(Intent.ACTION_DIAL);
intent.setData(Uri.fromParts("tel", "123456", null));
startActivity(Intent.createChooser(intent, ""), REQUEST_CODE));

在我看来,我的观点是

intent.setPackage("com.android.phone");

取决于设备或至少不会在我的设备上留下“电话”。

于 2015-05-08T14:26:44.537 回答
0

那是因为

  1. 只安装了 Skype 作为电话处理程序或
  2. 您将 Skype 关联为电话的默认处理程序。

在后一种情况下,转到设置、应用程序、Skype,然后在应用程序详细信息屏幕的底部删除该关联。

于 2013-08-20T15:30:20.750 回答
0

您的手机可能将 Skype 作为默认应用程序来处理Intent.ACTION_CALL

于 2013-08-20T15:30:55.597 回答
0

试试下面的代码:

uri = "tel:"+ServerDialogCallUs.this.contents.getString("phone_number");
Intent intent = new Intent(Intent.ACTION_CALL);
intent.setData(Uri.parse(uri));
startActivity(Intent.createChooser(intent, "Call Using..."));
于 2013-08-20T15:32:23.147 回答