Skype for Business 呼叫的意图
Intent for Skype for Business call
我在 Android 设备上安装了 Skype 和 Skype for Business。我想以编程方式使用 Skype for Business 进行 VOIP 呼叫。
我这样创建意图:
Intent intent = new Intent("android.intent.action.VIEW");
intent.setData(Uri.parse("skype:" + somePhoneNumber));
context.startActivity(intent);
当我开始拨打电话时,会出现一个弹出窗口:
完成操作使用:
Skype
Phone
永远只有一次
Skype for Business 不存在。
我尝试了以下操作,但它崩溃了 (IllegalArgument)
intent.setData(Uri.parse("skype for business:" + somePhoneNumber));
我能做什么?
如 MSDN docs 中所述,使用此调用 Skype for business Intent:
Intent intent = new Intent("android.intent.action.VIEW");
intent.setData(Uri.parse("ms-sfb://call?id=" + somePhoneNumber));
context.startActivity(intent);
这是我的做法:
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="jsmith@somewhere.com"
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(可能点击按钮)
Intent intent = new Intent(activity, SkypeActivity.class);
intent.putExtra(activity.getResources().getString(R.string.skypeEmailAddress), "jsmith@somewhere.com");
activity.startActivity(intent);
我在 Android 设备上安装了 Skype 和 Skype for Business。我想以编程方式使用 Skype for Business 进行 VOIP 呼叫。 我这样创建意图:
Intent intent = new Intent("android.intent.action.VIEW");
intent.setData(Uri.parse("skype:" + somePhoneNumber));
context.startActivity(intent);
当我开始拨打电话时,会出现一个弹出窗口:
完成操作使用:
Skype
Phone
永远只有一次
Skype for Business 不存在。
我尝试了以下操作,但它崩溃了 (IllegalArgument)
intent.setData(Uri.parse("skype for business:" + somePhoneNumber));
我能做什么?
如 MSDN docs 中所述,使用此调用 Skype for business Intent:
Intent intent = new Intent("android.intent.action.VIEW");
intent.setData(Uri.parse("ms-sfb://call?id=" + somePhoneNumber));
context.startActivity(intent);
这是我的做法:
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="jsmith@somewhere.com"
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(可能点击按钮)
Intent intent = new Intent(activity, SkypeActivity.class);
intent.putExtra(activity.getResources().getString(R.string.skypeEmailAddress), "jsmith@somewhere.com");
activity.startActivity(intent);