以编程方式从应用程序启动Skype并传递号码 – Android

试图启动并传递电话。 没有。 从我的应用程序通过此代码skype

PackageManager packageManager = getPackageManager(); Intent skype = packageManager.getLaunchIntentForPackage("com.skype.raider"); skype.setData(Uri.parse("tel:65465446")); startActivity(skype); 

Skype推出但它无法捕捉到这个数字。

此代码适用于我在两个Skype用户之间开始通话:

 Intent sky = new Intent("android.intent.action.VIEW"); sky.setData(Uri.parse("skype:" + user_name)); startActivity(sky); 

要find这个(以及其他人),请使用apktool打开Skype APK。 查看AndroidManifest.xml,您将看到他们了解的所有意图filter。 如果要触发其中一个intentfilter,则需要创建一个与之匹配的intent。 这是上面代码匹配的intentfilter:

       

你可以从{{new Intent()}}免费获得类别“android.intent.category.DEFAULT”,所以剩下的就是设置动作和URI。

tel:URIs的intentfilter如下所示:

       

所以你设置为动作并给Intent一个tel:URI和“正确的事情发生”。 会发生什么是Androidfindtel:URI的正确提供者。 它可能会让用户输入在Phone App和Skype之间进行选择。 Skype处理tel的优先级:URI为零,这是最低的。 因此,如果安装了电话应用程序,它可能会获得意图。

如果您想要触发video通话 ,则必须在Skype URI中添加“?call&video = true”。

 Intent skypeVideo = new Intent("android.intent.action.VIEW"); skypeVideo.setData(Uri.parse("skype:" + "" + "?call&video=true")); startActivity(skypeVideo); 

有关Skype URI的更多信息,请参阅: http : //developer.skype.com/skype-uris-program/skype-uri-ref

编辑:

直接Skype通话没有任何意图选择器:

如果您想要直接skype调用而没有任何意图选择器,请在清单文件中添加这些行…

                

将此代码用于Skype版本2:

 Intent skype_intent = new Intent("android.intent.action.VIEW"); skype_intent.setClassName("com.skype.raider", "com.skype.raider.Main"); skype_intent.setData(Uri.parse("skype:skypeusername")); startActivity(skype_intent); 

使用此代码,您将获得Skype活动的意图而不是调用者活动。 因此,您必须find具有针对操作CALL的intentfilter的活动的意图。 但更清楚的是Skype使用动作android.intent.action.CALL_PRIVILEGED ,所以通过这个filterfind。 仅用于调用者活动为cmp=com.skype.raider.contactsync.ContactSkypeOutCallStartActivity

Skype 2.X与Skype 1.X有明显不同的显示。 那里没有ContactSkypeOutCallStartActivity。 新清单包含代码:

  ...      ...  

所以你应该写:

 Intent skype_intent = new Intent("android.intent.action.CALL_PRIVILEGED"); skype_intent.setClassName("com.skype.raider", "com.skype.raider.Main"); skype_intent.setData(Uri.parse("tel:65465446")); context.startActivity(skype_intent); 

请注意,此方法不允许您使用Skype开始呼叫/聊天。 它仅适用于Skype Out。

我发现上面的代码不起作用……

 Intent i = packageManager.getLaunchIntentForPackage("com.skype.raider"); // i.setAction("android.intent.cation.CALL_PRIVILEGED"); // i.setClassName("com.skype.raider", "com.skype.raider.contactsync.ContactSkypeOutCallStartActivity"); // i.setData(Uri.parse("tel:5551234")); startActivity(i); 

注释掉的行要么停止运行,要么什么都不做!

所提供的代码将致电Skype并到达您可以选择Skype联系人的页面。更多信息将是最受欢迎的John