会议

本篇指南对在您的应用中快速集成实时会议能力进行了说明。

请确保您已经在BeTalk上注册你的应用

1. 工作区设置

下载Android版会议SDK,解压缩下载的文件,并按照以下步骤操作。

Android Studio安装

Android Studio是Android的官方IDE,其他IDE需要迁移到Android Studio来获得新功能的支持。因此,我们强烈建议您使用Android Studio。如果使用Eclipse或者其他,IDE BeTalk SDK可能无法正常工作。

开始一个新的空项目或打开现有的项目,然后单击“导入模块”

  • Android Studiov1.2或更高版本: File -> New -> Import Module

betalkandroidsdk2

  • Android Studio V1.1或更低版本:File -> New -> Import Module

betalkandroidsdk3

选择BeTalk SDK目录位置,然后单击确定以导入BeTalk SDK到项目中。注:BeTalk SDK包含BeTalk SDK演示项目,所以导入BeTalk目录模块不需要导入整个演示项目。

betalkandroidsdk4

点击“完成”导入BeTalk SDK模块如下图所示:

betalkandroidsdk5

现在,让我们添加BeTalk SDK作为引用如下图所示:

  • 选择项目 – >右键点击 -> 点击“ Open Module Settings”

betalkandroidsdk6

  • 选择项目的应用程序模块(默认模块名称) – >点击 “Dependencies” 标签 -> 点击 添加 (+) -> 选择“ Module dependency”

betalkandroidsdk7

  • 选择“BeTalk”SDK模块 – >点击确定

betalkandroidsdk8

现在,如下所示定义gradle.properties文件内的变量。您可以根据自己的开发

ANDROID_BUILD_MIN_SDK_VERSION=14
ANDROID_BUILD_TARGET_SDK_VERSION=21
ANDROID_BUILD_TOOLS_VERSION=21.1
ANDROID_BUILD_SDK_VERSION=21

 2. 更新AndroidMaifest.xml

您需要修改在AndroidManifest.xml中授予的权限,并指定所需的应用程序组件。

为了使所需要的功能生效,请添加以下内容:

<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.RECORD_AUDIO"/>
<uses-permission android:name="android.permission.WAKE_LOCK"/>
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"/>
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS"/>
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
<uses-permission android:name="android.permission.GET_TASKS"/>
<uses-permission android:name="android.permission.READ_CONTACTS"/>

首先,在BeTalk开发者网站注册你的应用程序来获取客户端的ID和密钥。否则BeTalk SDK不能正常工作。请在AndroidManifest.xml中进行声明。

<meta-data android:name="com.BeTalk.sdk.ClientId" android:value="your_client_id" />
<meta-data android:name="com.BeTalk.sdk.ClientSecret" android:value="your_client_secret" />

您的应用程序投入生产之前请设置沙箱“true”。在您的应用程序投入生产后,则应该将其设置为“false”。

<meta-data android:name="com.BeTalk.sdk.SandboxEnv" android:value="true" />

声明所需的活动,请添加以下代码:

<activity
    android:name="com.BeTalk.binder.activity.DialogFragmentActivity"
    android:theme="@style/BeTalkTheme"
    android:windowSoftInputMode="stateHidden|adjustResize" >
</activity>
<activity
    android:name="com.BeTalk.binder.meet.BTLiveShareViewActivity"
    android:launchMode="singleTask"
    android:theme="@style/BeTalkTheme"
    android:windowSoftInputMode="stateHidden|adjustPan" >
</activity>
<activity
    android:name="com.BeTalk.binder.BTTransparentActivity"
    android:launchMode="singleTask"
    android:theme="@style/MoxFullTranslucentActivity"
    android:windowSoftInputMode="stateHidden|adjustPan" >
</activity>
<activity
    android:name="com.BeTalk.binder.livemeet.BTSDKMeetActivity"
    android:launchMode="singleTask"
    android:theme="@style/BeTalkTheme">
</activity>
<service android:name="com.BeTalk.sdk.BeTalkMeetSdkService" />
<activity
    android:name="com.BeTalk.binder.activity.BTStackActivity"
    android:theme="@style/BTActivityDialog"
    android:windowSoftInputMode="stateHidden|adjustResize" >
</activity>
<activity
    android:name="com.BeTalk.binder.member.BTInviteActivity"
    android:theme="@style/BTActivityDialog"
    android:windowSoftInputMode="stateHidden" >
</activity>
<activity
    android:name="com.BeTalk.binder.conversation.BTConversationActivity"
    android:launchMode="singleTask"
    android:windowSoftInputMode="stateHidden|adjustResize"
    android:theme="@style/BeTalkTheme" >
</activity>
<activity 
    android:name="com.BeTalk.binder.pageview.PageViewActivity"
    android:launchMode="singleTask"
    android:windowSoftInputMode="stateHidden|adjustPan"
    android:theme="@style/BeTalkTheme" >
</activity>
<activity 
    android:name="com.BeTalk.binder.livemeet.LiveMeetActivity"
    android:launchMode="singleTask"
    android:theme="@style/BeTalkTheme" >
</activity>
<activity 
    android:name="com.BeTalk.binder.multiimagepicker.MultiImagePickerActivity"
    android:theme="@style/BeTalkTheme" >
</activity>
<activity
    android:name="com.BeTalk.binder.util.BTAlertDialog"
    android:theme="@style/MoxFullTranslucentActivity"
    android:windowSoftInputMode="stateHidden" >
</activity>

<activity android:name="com.BeTalk.binder.search.BTSearchActivity" android:theme="@style/BeTalkTheme"/>
<activity android:name="com.BeTalk.binder.webnote.BTWebNoteActivity" android:theme="@style/BeTalkTheme"/>
<activity android:name="com.BeTalk.binder.webclip.BTWebClipActivity" android:theme="@style/BeTalkTheme"/>
<activity android:name="com.BeTalk.binder.livemeet.MeetRingActivity" android:theme="@style/BeTalkTheme"/>
<service android:name=".service.AudioPlayerService" />

为更好的用户体验,定义下列Theme或使用BeTalkTheme

<style name="BeTalkTheme" parent="AppBaseTheme">
    <item name="android:windowNoTitle">true</item>
    <item name="android:windowAnimationStyle">@style/MoxActivityAnimation</item>
    <item name="android:textViewStyle">@style/MoxTextViewBase</item>
    <item name="android:listViewStyle">@style/MoxListViewBase</item>
</style>

 3. 实现登录/登出功能

请参照聊天实现登录/登出功能

在演示程序中没有注册部分,但是会使用我们在步骤3中创建的虚拟数据。同样的,除了BeTalk Chat SDK相关部分我们不会涵盖登录的所有内容。用户管理的部分应该在你的应用中完成。BeTalk Chat SDK无法代替这部分功能。登录部分我们需要做的是:

初始化MXAccountManager,我们建议在App启动时即初始化MXAccountManager。在示例中,我们在MoxieChatApplication初始化。代码如下:

@Override
public void onCreate() {
    super.onCreate();
    try {
        BTAccountManager.createInstance(this);
    } catch (BTSDKException.InvalidParameter invalidParameter) {
        Log.e(TAG, "Error when creating BTAccountManager instance.", invalidParameter);
    }
}

登录成功后,在BeTalk中登记用户以便使用BeTalk服务。在LoginActivity中添加代码如下:

// Login success and then setup user on BeTalk
User user = PreferenceUtil.getUser(LoginActivity.this);
try {
    Bitmap avatar = BitmapFactory.decodeStream(LoginActivity.this.getAssets().open(user.avatarPath));
    BTSDKConfig.MXUserInfo mxUserInfo = new BTSDKConfig.BTUserInfo(user.email, BTSDKConfig.BTUserIdentityType.IdentityUniqueId);
    BTSDKConfig.BTProfileInfo btProfileInfo = new BTSDKConfig.BTProfileInfo(user.firstName, user.lastName, avatar);
    BTAccountManager.getInstance().setupUser(btUserInfo, btProfileInfo, null, null, LoginActivity.this);
} catch (IOException e) {
    Log.e(TAG, "Can't decode avatar.", e);
}

setupUser是异步操作,必须传递一个回调参数LoginActivity,如代码所示:

@Override
public void onLinkAccountDone(boolean success) {
    if (success) {
        Log.i(TAG, "Linked to BeTalk account successfully.");
        startConferenceListActivity();
    } else {
        Toast.makeText(this, "Failed to setup BeTalk user.", Toast.LENGTH_LONG).show();
        Log.e(TAG, "Failed to setup BeTalk user.");
        showProgress(false);
    }
}

用户退出app时要断开BeTalk账号链接。在示例程序中,退出是在BaseActivity操作工具栏实现,以便用户可以从BaseActivity任一活动中注销。

BTAccountManager.getInstance().unlinkAccount(this)

4. 开始会议

要在您的应用程序加入会议和屏幕共享功能,首先要获得BTMeetManager的一个实例,方可加入会议/屏幕共享/视频/音频功能:

获取BeTalk会议管理类:

static public BTMeetManager getInstance();

例:

BTMeetManager meetMgr = BTMeetManager.getInstance();

开始会议

public void startMeet(String topic, String guideMessage, OnStartMeetListener listener);

开始会议的方法来实现屏幕共享,语音通话和聊天。

参数:

名称 描述
topic 会议主题
guideMessage 邀请信息的定制内容
listener 监听会议中事件
Unauthorized 用户没有成功初始化
MeetIsInProgress 另一个正在进行中会议

例:

meetMgr.startScreenShareMeet(âBeTalk Meetâ,âWelcome to Join My BeTalk Meet!â,
new OnStartMeetListener(){
    @Override
    public void onStartMeetDone(String meetId, String meetUrl){
        //Add code to send url for invitation here
    }

    @Override
    public void onStartMeetFailed(int errorCode, String message) {
        // handle the failure
    }
});

 5. 邀请用户加入会议

public void inviteParticipants(List invitees);

发起会议成功后邀请用户加入会议(N / A如果您的应用程序使用BeTalk身份初始化用户)。

参数:

名称 描述
invitees 被邀请加入会议的用户列表
MeetIsNotStarted 会议不在进行中

例:

meetMgr.inviteParticipants(invitees);

 6. 加入会议

public void joinMeet(String meetId, String userName, OnJoinMeetListener listener);

加入现有BeTalk 会议。

参数:

名称 描述
meetId BeTalk 会议 ID
userName 加入会议的用户名(如果使用唯一编码的身份认证模型,将其设置为空)
listener 监听会议事件
Unauthorized 用户没有成功初始化(使用唯一编码的身份认证模型)
MeetIsInProgress 另一个正在进行中会议

例:

meetMgr.setOnEndMeetListener(new BTMeetManager.OnEndMeetListener() {
    @Override
    public void onMeetEnded(String meetID) {
        // add code here
    }
});

 7. 会议结束后回调函数

public void setOnEndMeetListener(OnEndMeetListener listener)

设置会议结束监听。

参数:

名称 描述
listener 监听会议结束通知

例:

BTMeetManager.getInstance().setOnEndMeetListener(new BTMeetManager.OnEndMeetListener() {
    @Override
    public void onMeetEnded(String meetID) {
    // add code here
    }
});