Search code examples
androidandroid-intentskype-for-business

Intent for Skype for Business call


I have Skype and Skype for Business installed on an Android device. I want to programatically make a VOIP call with Skype for Business. I create the intent like so:

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

When I start the intent to make the call, a popup appears:

Complete action using:
Skype
Phone
Just Once Always

Skype for Business is not there.

I tried the followoing but it crashes (IllegalArgument)

intent.setData(Uri.parse("skype for business:" +  somePhoneNumber));

What can I do?


Solution

  • Here's how I did it:

    strings.xml

    <!-- skype -->
    <string name="skype_activity_title">Skype for Business call</string>
    <string name="make_skype_call">Make Skype Call</string>
    <string name="video_call">Video call</string>
    <string name="permission_rationale">"Contacts permissions are needed for providing email completions."</string>
    <string name="skypeEmailAddress">skypeEmailAddress</string>
    

    res/layout.skype.xml

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:id="@+id/skype_layout"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        android:padding="20dp">
    
        <EditText
            android:id="@+id/skypeEmailAddress"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:padding="20dp"
            android:hint="[email protected]"
            android:inputType="textEmailAddress"
            android:textSize="30sp"/>
    
        <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="horizontal">
    
            <Button
                android:id="@+id/skype_button"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginRight="20dp"
                android:textSize="30sp"
                android:text="@string/make_skype_call" />
    
            <CheckBox
                android:id="@+id/videoCheck"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="@string/video_call"
                android:textSize="30sp"/>
    
        </LinearLayout>
    </LinearLayout>
    

    AndroidManifest.xml

    <!-- Skype Activity -->
    <activity
        android:name="com.somwhere.myproject.SkypeActivity"
        android:label="@string/skype_activity_title"
        android:theme="@style/Theme.AppCompat">
        <meta-data
            android:name="android.support.PARENT_ACTIVITY"
            android:value=".MainActivity"/>
    </activity>
    

    SkypeActivity.java

    package com.somwhere.myproject;
    
    import android.content.Intent;
    import android.net.Uri;
    import android.os.Bundle;
    import android.support.v7.app.AppCompatActivity;
    import android.util.Log;
    import android.view.View;
    import android.widget.Button;
    import android.widget.CheckBox;
    import android.widget.EditText;
    
    public class SkypeActivity extends AppCompatActivity {
    
        private static final String TAG = "SkypeActivity";
        private static final int REQUEST_READ_CONTACTS = 0;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
    
            Intent intent = getIntent();
            final String skypeEmailAddress = intent.getStringExtra(getResources().getString(R.string.skypeEmailAddress));
    
            setContentView(R.layout.skype);
    
            final EditText skypeEmailAddressText = (EditText) findViewById(R.id.skypeEmailAddress);
            skypeEmailAddressText.setText(skypeEmailAddress);
    
            Button skypeButton = (Button) findViewById(R.id.skype_button);
    
            Log.i(TAG, "skypeEmailAddress: " + skypeEmailAddress);
            final CheckBox videoCall = (CheckBox) findViewById(R.id.videoCheck);
            skypeButton.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
    
                    String uriString = "ms-sfb://call?id=" + skypeEmailAddress;
                    if (videoCall.isChecked()) {
                        uriString += "&video=true";
                    }
                    Uri uri = Uri.parse(uriString);
                    Intent callIntent = new Intent(Intent.ACTION_VIEW, uri);
                    startActivity(callIntent);
                }
            });
    
        }
    }
    

    MainActivity.java (on a button click probably)

    Intent intent = new Intent(activity, SkypeActivity.class);
    intent.putExtra(activity.getResources().getString(R.string.skypeEmailAddress), "[email protected]");
    activity.startActivity(intent);