音视频
一. Android版本环境集成说明
1. 引用插件
1、开发者主Module的build.gradle配置文件中添加如下代码
- android {
- //.........
- repositories {
- flatDir {
- dirs 'libs'
- }
- }
- }
2、在开发者主Module的libs里面添加需要的aar文件(如下图所示)
3、在开发者主Module的build.gradle配置文件中依赖导入的aar文件
注意事项:若之前集成过其他插件,已依赖如下某个aar文件,如
Yuntx_Android_Common_Plugin_v1.1.x,则无需再次依赖
- dependencies {
- // ........
- compile(name: 'Yuntx_Android_Voip_Plugin_v1.1.x', ext: 'aar')
- compile(name: 'Yuntx_Android_Common_Plugin_v1.1.x', ext: 'aar')
- // ........
- }
4、在开发者主Module的build.gradle配置文件中依赖如下第三方包
注意事项:如果之间已有以下某个第三方库,可使用原有的,也可以根据自己需求更换新的版本
- dependencies {
- // ........
- compile 'com.github.bumptech.glide:glide:3.7.0'
- compile 'org.jsoup:jsoup:1.10.1'
- compile 'io.reactivex:rxjava:1.1.1'
- compile 'io.reactivex:rxandroid:1.1.0'
- compile 'com.squareup.okhttp3:logging-interceptor:3.8.0'
- compile('com.squareup.retrofit2:converter-gson:2.1.0') {
- transitive = true
- }
- compile 'com.alibaba:fastjson:1.2.17'
2. 配置工程
1.3.1 清单文件中权限申请
- // SDK 权限申明, 第三方 APP 接入时,请将 com.yuntongxun.voipdemo 替换为自己的包名
- // 和下面的 uses-permission 一起加入到你的 AndroidManifest 文件中。
- <permission
- android:name="com.yuntongxun.voipdemo.permission.RECEIVE_MSG"
- android:protectionLevel="signature" />
- <permission
- android:name="com.yuntongxun.voipdemo.permission.INCOMING_CALL"
- android:protectionLevel="signature" />
- <uses-permission android:name="com.yuntongxun.voipdemo.permission.RECEIVE_MSG" />
- <uses-permission android:name="com.yuntongxun.voipdemo.permission.INCOMING_CALL" />
1.3.2 复制指定的文件
1) 复制指定的类
请把下面的自定义广播类YuntxNotifyReceiver.java文件粘贴到开发者的module中(完整版 包含IM和Voip)
2) 复制指定的声频文件
开发者需要把demo中的assert目录文件中拷贝在自己的主module资产目录里,文件如下图箭头所指,开发者也可以使用自己的声频文件,只需要把名字改为一样的就可以。
1.3.3 注册自定义通知的广播接收者
注意事项:
1、如果之前集成过容联云的其他插件,已经注册过自定义YuntxNotifyReceiver,那么可以使用已注册过的,也可以重新按照以下流程注册
2、本配置是属于application的属性,需要复制到AndroidManifest 清单文件的application节点内。
3、声明自定义通知的广播接收器,开发者需要把action 中的 com.yuntongxun.imdemo替换为自有项目APP的包名
- // 声明自定义通知的广播接收器(需要替换包名,详见注意事项)
- <receiver
- android:name="YuntxNotifyReceiver在开发者module中的位置"
- android:exported="false">
- <intent-filter>
- // 接收push消息
- // action匹配规则{packageName + ".action" + "功能"}
- // com.yuntongxun.imdemo 替换成自己的报名
- // 以下三条action 可以根据自己需求来进行增删
- // 用于电话会议
- <action android:name="com.yuntongxun.imdemo.action.VOIP_CALL" />
- // 用于IM消息
- <action android:name="com.yuntongxun.imdemo.action.MESSAGE" />
- // 用于通知点击
- <action android:name="com.yuntongxun.imdemo.action.NOTIFICATION_CLICK" />
- </intent-filter>
- </receiver>
- // 应用处理程序逻辑服务 name为YuntxNotifyReceiver的位置加 $NotifyService
- <service android:name="YuntxNotifyReceiver的位置$NotifyService" />
二、初始化及登录
注意事项:
如果接入前已经使用容联云的其他插件,如plugin_voip等,已配置过登录,那么无需再次登录,请直接跳转到可接入界面
如果要使用私有云,那么服务器的地址书写格式请参考IMDemo的assets目录下的文件(位置如下图所示)
2.1 插件集成初始化
以下代码是Applicaiton onCreate中调用
- @Override
- public void onCreate() {
- super.onCreate();
- LogUtil.e(TAG, "App onCreate");
- // 云通讯SDK上下文对象,必选
- SDKCoreHelper.setContext(this);
- // 音视频通话插件初始化(可选)
- Voip.VoIPPluginParams.Builder builder = new Voip.VoIPPluginParams.Builder();
- // 设置VoIP回掉接口
- builder.setVoipCallback(VoipImpl.getInstance());
- Voip.initVoIPPlugin(builder.build());
- }
2.2 登录
2.1.1 登录
登录分两种模式:
1)强制登入
2)自动登入
两个接口区别是强制登入需要传用户信息,自动登入的是使用上一次的用户信息登入
强制登入:一般用于App首次使用填写完用户账号密码之后使用 如下接口
- SDKCoreHelper.login(builder.build());
自动登入:一般用于不需要进行用户账号密码填写应用主页地方使用 如下接口
- if (AppMgr.getClientUser() != null) {
- LogUtil.d(TAG, "SDK auto connect...");
- SDKCoreHelper.init(getApplicationContext());
- }
完整登入逻辑代码如下(强制登入):
- ClientUser.UserBuilder builder = new ClientUser.UserBuilder(account, name);
- SDKCoreHelper.login(builder.build());
2.1.2 获取登录状态
1) 注册获取登录状态的广播接收者
- /IntentFilter intentFilter = new IntentFilter();
- intentFilter.addAction(SDKCoreHelper.ACTION_SDK_CONNECT);
- intentFilter.addAction(RongXInUtils.ACTION_KICK_OFF);
- intentFilter.addAction(SDKCoreHelper.ACTION_LOGOUT);
- registerReceiver(mSDKNotifyReceiver, intentFilter);
- private BroadcastReceiver mSDKNotifyReceiver = new BroadcastReceiver() {
- @Override
- public void onReceive(Context context, Intent intent) {
- if (SDKCoreHelper.isLoginSuccess(intent)) {
- Intent action = new Intent(LoginActivity.this, MainActivity.class);
- action.putExtra("userid", et_account.getText().toString());
- startActivity(action);
- finish();
- } else {
- int error = intent.getIntExtra("error", 0);
- if (error == SdkErrorCode.CONNECTING) return;
- LogUtil.e(TAG, "登入失败[" + error + "]");
- ToastUtil.showMessage("登入失败 == " + error);
- proBar.setVisibility(View.GONE);
- }
- }
- };
2) 注销获取登录状态的广播接收者
- unregisterReceiver(mSDKNotifyReceiver);
2.3 登出
- /**
- * 此方法为退出当前登录账户
- */
- SDKCoreHelper.logout();
三、Voip通话
效果图如下:
3.1 音视频插件初始化(Application onCreate方法中)
- @Override
- public void onCreate() {
- super.onCreate();
- LogUtil.e(TAG, "App onCreate");
- // 云通讯SDK上下文对象,必选
- SDKCoreHelper.setContext(this);
- // 音视频通话插件初始化(可选)
- Voip.VoIPPluginParams.Builder builder = new Voip.VoIPPluginParams.Builder();
- // 设置VoIP回掉接口
- builder.setVoipCallback(VoipImpl.getInstance());
- Voip.initVoIPPlugin(builder.build());
- }
3.2 语音通话( ECVoIPCallManager.CallType.VOICE )
- /**
- * 发起语音通话
- * @param Context
- * @param callType 呼叫类型 ECVoIPCallManager.CallType.VOICE or ECVoIPCallManager.CallType.VIDEO
- * @param nickname 被叫者昵称 也可以通过IVoipCallBack接口 设置
- * @param contactId 被叫者userID
- * @param phoneNumber 对方手机号 如果 isCallBack设置为ture,那么该参数必须要传
- * @param isCallBack true表示回拨 false表示不回拨
- */
- Voip.startCallAction(
- MainActivity.this,
- ECVoIPCallManager.CallType.VOICE,
- "姓名-"+toAccountVoice,
- toAccountVoice,
- "手机号",
- false);
3.3 视频通话( ECVoIPCallManager.CallType.VIDEO )
- /**
- * 发起语音通话
- * @param Context
- * @param callType 呼叫类型 ECVoIPCallManager.CallType.VOICE or ECVoIPCallManager.CallType.VIDEO
- * @param nickname 被叫者昵称 也可以通过IVoipCallBack接口 设置
- * @param contactId 被叫者userID
- * @param phoneNumber 对方手机号 如果 isCallBack设置为ture,那么该参数必须要传
- * @param isCallBack true表示回拨 false表示不回拨
- */
- Voip.startCallAction(
- MainActivity.this,
- ECVoIPCallManager.CallType.VOICE,
- "姓名-"+toAccountVoice,
- toAccountVoice,
- "手机号",
- false
- );
3.4 IVoipCallBack接口
- /**
- * 通话状态信息
- * @param voIPCall 通话状态信息
- */
- @Override
- public void onCallEvents(ECVoIPCallManager.VoIPCall voIPCall) {
- LogUtil.d(TAG, "[onCallEvents] call:" + voIPCall);
- }
- /**
- * 通话页面信息绑定接口
- *
- * @param userId 传出的id 开发者可根据此id来从自己数据库等中查询对应的名字和头像
- * @param avater 头像的imageview控件
- */
- @Override
- public void onVoipBindView(Context context, String userId, ImageView avater) {
- //代码示例
- LogUtil.e(TAG, "onVoipBindView userId=" + userId + " avater=" + avater);
- avater.setImageResource(R.mipmap.ic_launcher);
- }