Intent.ACTION_CALL启动Skype通话而不是“正常”通话

时间:2013-08-20 15:27:31

标签: android android-intent

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

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

此代码不是拨打普通电话,而是启动Skype电话。如何为用户提供在普通呼叫和Skype呼叫之间进行选择的选项。 感谢

6 个答案:

答案 0 :(得分:18)

实际上,我错过了许可:

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

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

答案 1 :(得分:4)

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

Intent intent = new Intent(Intent.ACTION_CALL);
intent.setPackage("com.android.phone");
intent.setData(Uri.parse("tel:" + number));
startActitivy(intent);

答案 2 :(得分:2)

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

  1. Intent.ACTION_CALL将调用,这可能需要正确的权限,但是使用Intent.ACTION_DIAL并使用Intent Chooser,我得到了正确的行为。
  2. 关于USSD喜欢&#34; * 123 * 03#&#34;在这个上下文中弹出也是问题,android说,它无法处理意图
  3. 2.1。 Uri.encode(&#34;#&#34;)不是解决方案,只是增加了一个&#34; 23&#34;电话号码

    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");
    

    取决于设备或至少不会离开&#34;电话&#34;包含在我的设备上。

答案 3 :(得分:0)

那是因为

  1. 只安装了Skype作为电话呼叫处理程序或
  2. 您将Skype与电话通话的默认处理程序相关联。
  3. 在后一种情况下,请转到设置,应用,Skype,并删除应用详细信息屏幕底部的关联。

答案 4 :(得分:0)

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

答案 5 :(得分: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..."));