Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/183.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android Intent.ACTION“您的呼叫会启动skype呼叫,而不是”呼叫;“正常”;电话_Android_Android Intent - Fatal编程技术网

Android Intent.ACTION“您的呼叫会启动skype呼叫,而不是”呼叫;“正常”;电话

Android Intent.ACTION“您的呼叫会启动skype呼叫,而不是”呼叫;“正常”;电话,android,android-intent,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通话之间进行选择。 谢谢,那是因为 只有skype安装为电话处

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

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

此代码将启动skype呼叫,而不是拨打普通电话。如何让用户在普通通话和skype通话之间进行选择。 谢谢,那是因为

  • 只有skype安装为电话处理程序或
  • 您已将skype关联为电话呼叫的默认处理程序

  • 在后一种情况下,请转到“设置”、“应用程序”、“skype”,并删除应用程序详细信息屏幕底部的关联。

    您的手机可能将skype作为默认应用程序来处理
    意图。操作\u呼叫

    实际上,我缺少权限:

     <uses-permission android:name="android.permission.CALL_PHONE" />
    
    
    
    将此权限添加到清单后,我可以在普通呼叫和skype呼叫之间进行选择。
    谢谢

    请尝试以下代码:

    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..."));
    
    尝试调用setPackage()方法,工作正常:

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

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

  • Intent.ACTION\u调用将调用,这可能需要正确的权限,但是使用Intent.ACTION\u拨号并使用Intent选择器,我得到了正确的行为
  • 关于类似USSD的“*123*03#”,在这种情况下也会弹出问题,android说,它无法处理意图
  • 2.1。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");
    

    取决于设备,或者至少没有在我的设备上保留“电话”。

    有趣的是,该权限实际上并不取决于使用action\u call,而是取决于实际应用程序的使用,因此允许拨打skype电话,但不允许拨打普通电话。添加此权限后,我可以选择默认操作,谢谢。“我如何才能让用户在正常通话和skype通话之间进行选择。”此解决方案不会给用户该选项,是吗?