How to start a Skype call from an Android app?

21,174

Solution 1

See this answer: https://stackoverflow.com/a/8844526/819355

Jeff suggests using a skype:<user name> instead of tel:<phone number>

After some studing of the skype apk with apktool, as suggested in that answer, I came up with this code, for me it's working:

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

    }

Solution 2

Refer to Skype developer: Skype URI tutorial: Android apps Also remember to add "?call" in your url. E.g

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

Without it, Skype may not dial the number.

Solution 3

You should not include a specific class when calling an external app. Let the user decide of the application he/she wants to use. That's the way android has been designed and it's a better solution than obliging people to use a soft (moreover quite a slow, closed and inconvenient app to my mind).

In other words, just use the Uri, that's the job of skype of declaring its ability to capture such intents.

Share:
21,174
Daniele
Author by

Daniele

Just a passionate web/app developer

Updated on April 17, 2020

Comments

  • Daniele
    Daniele about 4 years

    I'm trying to start a Skype intent from my Android App, passing a phone number. So far, thanks to other people who ad similiar needs here on stackoverflow, I've managed to start skype, but still I can't pass the phone number. This is the code I'm using:

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

    What's happening is that skype starts, but gives me a toast saying that the number is not valid, and suggests me to add the international prefix. The Log.d gives me tel:+39........ (the number works, I'm using it also for

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

    In fact, when I go to the Skype's view for calling, I see it's been composed +0 So what it seems to me is that I'm passing the phone number in the wrong way, or to the wrong Activity....any help would be very appreciated! In the meantime, I just want to say that StackOverflow simply rocks.

    • user462990
      user462990 about 11 years
      This works perfectly (for me). I needed a way to start a Skype Call without any intervention by the user.
    • Parth Doshi
      Parth Doshi about 8 years
      how to programmatically enter the credentials for Skype login screen? It may be possible that user is not logged into the app
  • Daniele
    Daniele about 12 years
    Hi, thanks for the answer. I know, and I've already tried to explain this to my client, of course, but, sadly, here I am, trying to do this thing...
  • marmor
    marmor almost 12 years
    If the answer was helpful please mark it as accepted so other people can use it, if you've solved the problem in a different way, you can answer your own question and accept it
  • Daniele
    Daniele almost 12 years
    This answer was helpful, but didn't contain the exact procedure, should I write the working code as answer to my question or edit the question?
  • user462990
    user462990 about 11 years
    This works perfectly (for me). I needed a way to start a Skype Call without any intervention by the user.
  • TheGraduateGuy
    TheGraduateGuy over 10 years
    well i tried it but its only opening akype app and not calling the number.any idea?
  • Sara
    Sara over 8 years
    How to make skype video call?
  • Parth Doshi
    Parth Doshi over 8 years
    how to programmatically enter the credentials for Skype login screen? It may be possible that user is not logged into the app
  • Parth Doshi
    Parth Doshi about 8 years
    how to programmatically enter the credentials for Skype login screen? It may be possible that user is not logged into the app
  • android developer
    android developer about 8 years
    Is it possible to do the same, but for chat? Also, is it possible to put a phone number instead?
  • marmor
    marmor about 8 years
    @androiddeveloper if it works in the Skype app, it might work as an intent. Try using play.google.com/store/apps/details?id=com.zmarties.detective to see Skype's manifest file, and check the public intents they support
  • android developer
    android developer about 8 years
    @marmor I've found it eventually, but thanks for trying to help. Here's the result: stackoverflow.com/q/35972329/878126 . No idea why my question is so downvoted. I even answered myself with a lot of info.
  • m3nda
    m3nda over 6 years
    I felt no difference without "?call" part. Also, the "skype:" stuff is only working on modern Skype for me. Old ones just pop up skype dial screen but didn't place call. Using usernames instead of phones made it work in all cases. The problem with numbers using "skype:" happend to me even when trying to run it from am start skype:phonenumber.