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