如何从Android应用程序启动Skype通话?

我试图从我的Android应用程序开始一个Skype意图,传递一个电话号码。 到目前为止,由于其他人需要在这里stackoverflow相似,我已经设法启动Skype,但我仍然无法通过电话号码。 这是我正在使用的代码:

Intent sky = new Intent("android.intent.action.CALL_PRIVILEGED"); sky.setClassName("com.skype.raider", "com.skype.raider.Main"); sky.setData(Uri.parse("tel:" + number)); Log.d("UTILS", "tel:" + number); ctx.startActivity(sky); 

发生了什么事是Skype开始,但给了我一个敬酒说数字是无效的,并build议我添加国际前缀。 Log.d给我电话:+39 ……..(数字的作品,我也用它

 public static void call(String number, Context ctx) { try { Intent callIntent = new Intent(Intent.ACTION_CALL); callIntent.setData(Uri.parse("tel:" + number)); ctx.startActivity(callIntent); } catch (ActivityNotFoundException e) { Log.e("helloandroid dialing example", "Call failed", e); } } 

实际上,当我转到Skype的呼叫视图时,我发现它已经被编成了+0所以在我看来,我是通过错误的方式传递电话号码,或错误的活动….任何帮助将非常感激! 同时,我只是想说,StackOverflow只是简单的摇滚。

Solutions Collecting From Web of "如何从Android应用程序启动Skype通话?"

看到这个答案: https : //stackoverflow.com/a/8844526/819355

杰夫build议使用skype:<user name>而不是tel:<phone number>

按照这个答案中的build议,在使用apktool进行一些skype apk学习之后,我想出了这个代码,对于我来说它是可行的:

 public static void skype(String number, Context ctx) { try { //Intent sky = new Intent("android.intent.action.CALL_PRIVILEGED"); //the above line tries to create an intent for which the skype app doesn't supply public api Intent sky = new Intent("android.intent.action.VIEW"); sky.setData(Uri.parse("skype:" + number)); Log.d("UTILS", "tel:" + number); ctx.startActivity(sky); } catch (ActivityNotFoundException e) { Log.e("SKYPE CALL", "Skype failed", e); } } 

请参阅Skype开发者: http : //developer.skype.com/skype-uris/skype-uri-tutorial-android还记得在您的url中添加“?call”。 例如

intent.setData(Uri.parse(“skype:”+ phoneNumber +“?call”));

没有它,Skype可能不会拨打该号码。

调用外部应用程序时,不应该包含特定的类。 让用户决定他/她想要使用的应用程序。 这是Androiddevise的方式,这是一个更好的解决scheme,而不是让人们使用软(而且相当缓慢,封闭和不方便的应用程序)。

换句话说,就是使用Uri,这是宣称其能够捕捉这种意图的Skype的工作。