公司的項目需要添加視頻通話功能,公司選擇使用AnyChatSDK來實現;
①下載:
地址:http://www.anychat.cn/download.html;
這里官方提供了完成的Demo和開發文檔可以下載
②我們目前采用的是消息隊列,我重點介紹這一部分
package com.bairuitech.main; import java.util.ArrayList; import java.util.List; import android.app.Activity; import android.app.Dialog; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.util.DisplayMetrics; import android.util.Log; import android.view.inputmethod.InputMethodManager; import com.bairuitech.anychat.AnyChatBaseEvent; import com.bairuitech.anychat.AnyChatCoreSDK; import com.bairuitech.anychat.AnyChatDefine; import com.bairuitech.anychat.AnyChatObjectDefine; import com.bairuitech.anychat.AnyChatObjectEvent; import com.bairuitech.anychat.AnyChatVideoCallEvent; import com.bairuitech.common.ConfigEntity; import com.bairuitech.common.ConfigService; import com.bairuitech.common.DialogFactory; import com.bairuitech.common.ScreenInfo; public class AnyChat_Login implements AnyChatBaseEvent, AnyChatObjectEvent, AnyChatVideoCallEvent { // private static final String mStrIP = "demo.anychat.cn"; private static final String mStrIP = "**.*.*.***"; //服務器地址 private static final int mSPort = ****; //端口號 private static final String TAG = "AnyChat_Login"; private String mStrName = "Tom"; private String passWord; private List<Integer> mobject = new ArrayList<Integer>(); // 裝載營業廳ID private int[] queueIds; private int USER_TYPE_ID; // 0代表是進入客戶界面,2代表是接入座席界面 public AnyChatCoreSDK anyChatSDK; private AnyChat_LoginCallBack loginCallback; private AnyChat_GetFunRoomCallBack roomCallBack; private AnyChat_UpdateQueueInfoCallBack updateCallBack; private AnyChat_VideoResultCallBack videoCallBack; private Activity context; private QueueInfoEntity entity; private long time; /** * 用戶當前狀態 * * @author Administrator * */ public enum LoginStatus { Success, Waiting, Failure, Finish, NoNet, UnKnownErr, Reconnection } /** * * @param context * 上下文環境 * @param termId * 終端號 (用戶名) * @param applyId * 業務ID(Password) */ public AnyChat_Login(Activity context, String termId, String applyId) { this.context = context; this.mStrName = termId; this.passWord = applyId; entity = QueueInfoEntity.getQueueInfoEntity(); setDisPlayMetrics(); ApplyVideoConfig(); InitSDK(); } public void setAnyChat_LoginCallBack(AnyChat_LoginCallBack callback) { this.loginCallback = callback; } public void setAnyChat_GetFunRoom(AnyChat_GetFunRoomCallBack callback) { this.roomCallBack = callback; } public void setUpdateCallBack(AnyChat_UpdateQueueInfoCallBack updateCallBack) { this.updateCallBack = updateCallBack; } public void setVideoCallBack(AnyChat_VideoResultCallBack videoCallBack) { this.videoCallBack = videoCallBack; } // 初始化SDK private void InitSDK() { if (anyChatSDK == null) { anyChatSDK = AnyChatCoreSDK.getInstance(context); } anyChatSDK.SetBaseEvent(this);// 基本事件 anyChatSDK.SetObjectEvent(this);// 營業廳排隊事件 anyChatSDK.SetVideoCallEvent(this); anyChatSDK.InitSDK(android.os.Build.VERSION.SDK_INT, 0);// 初始化sdk AnyChatCoreSDK.SetSDKOptionInt( AnyChatDefine.BRAC_SO_LOCALVIDEO_AUTOROTATION, 1); } public void loginAnyChat() { loginCallback.getLoginStatus(LoginStatus.Waiting, -1); anyChatSDK.Connect(mStrIP, mSPort); // 注冊廣播 registerBoradcastReceiver(); } // 對鍵盤顯示進行控制 private void hideKeyboard() { InputMethodManager imm = (InputMethodManager) context .getSystemService(Context.INPUT_METHOD_SERVICE); if (imm.isActive()) { imm.hideSoftInputFromWindow(context.getCurrentFocus() .getApplicationWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS); } } /** * 屏幕大小 */ private void setDisPlayMetrics() { DisplayMetrics dMetrics = new DisplayMetrics(); context.getWindowManager().getDefaultDisplay().getMetrics(dMetrics); ScreenInfo.WIDTH = dMetrics.widthPixels; ScreenInfo.HEIGHT = dMetrics.heightPixels; } public void onDestroy() { anyChatSDK.LeaveRoom(-1); anyChatSDK.Logout(); anyChatSDK.Release(); context.unregisterReceiver(mBroadcastReceiver); } public void onRestart() { anyChatSDK.SetBaseEvent(this); anyChatSDK.SetObjectEvent(this); } @Override public void OnAnyChatConnectMessage(boolean bSuccess) { if (!bSuccess) { Log.e(TAG, "連接服務器失敗,自動重連,請稍后..."); loginCallback.getLoginStatus(LoginStatus.Reconnection, -1); } anyChatSDK.Login(mStrName, passWord); } @Override public void OnAnyChatLoginMessage(int dwUserId, int dwErrorCode) { // 連接成功 if (dwErrorCode == 0) { // hideKeyboard(); // 保存用戶id和用戶角色信息 entity.selfUserName = mStrName; entity.mUserID = dwUserId; entity.userType = USER_TYPE_ID; Log.e(TAG, "Connect to the server success"); // 初始化業務對象屬性身份 InitClientObjectInfo(dwUserId); loginCallback.getLoginStatus(LoginStatus.Success, dwUserId); } else { Log.e(TAG, "登錄失敗,errorCode:" + dwErrorCode); loginCallback.getLoginStatus(LoginStatus.Failure, -1); } } // 初始化服務對象事件;觸發回調OnAnyChatObjectEvent函數 private void InitClientObjectInfo(int dwUserId) { // 業務對象身份初始化;0代表普通客戶,2是代表座席 (USER_TYPE_ID) AnyChatCoreSDK.SetSDKOptionInt(AnyChatDefine.BRAC_SO_OBJECT_INITFLAGS, USER_TYPE_ID); // 業務對象優先級設定; int dwPriority = 10; AnyChatCoreSDK.ObjectSetIntValue( AnyChatObjectDefine.ANYCHAT_OBJECT_TYPE_CLIENTUSER, dwUserId, AnyChatObjectDefine.ANYCHAT_OBJECT_INFO_PRIORITY, dwPriority); // 業務對象屬性設定,必須是-1; int dwAttribute = -1; AnyChatCoreSDK.ObjectSetIntValue( AnyChatObjectDefine.ANYCHAT_OBJECT_TYPE_CLIENTUSER, dwUserId, AnyChatObjectDefine.ANYCHAT_OBJECT_INFO_ATTRIBUTE, dwAttribute); // 向服務器發送數據同步請求指令 AnyChatCoreSDK.ObjectControl( AnyChatObjectDefine.ANYCHAT_OBJECT_TYPE_AREA, AnyChatObjectDefine.ANYCHAT_INVALID_OBJECT_ID, AnyChatObjectDefine.ANYCHAT_OBJECT_CTRL_SYNCDATA, dwUserId, 0, 0, 0, ""); } @Override public void OnAnyChatEnterRoomMessage(int dwRoomId, int dwErrorCode) { } @Override public void OnAnyChatOnlineUserMessage(int dwUserNum, int dwRoomId) { } @Override public void OnAnyChatUserAtRoomMessage(int dwUserId, boolean bEnter) { } // 網絡端口 @Override public void OnAnyChatLinkCloseMessage(int dwErrorCode) { anyChatSDK.LeaveRoom(-1); anyChatSDK.Logout(); Log.e(TAG, "連接關閉,errorCode:" + dwErrorCode); loginCallback.getLoginStatus(LoginStatus.UnKnownErr, -1); } // 廣播 private BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { String action = intent.getAction(); if (action.equals("NetworkDiscon")) { anyChatSDK.LeaveRoom(-1); anyChatSDK.Logout(); loginCallback.getLoginStatus(LoginStatus.NoNet, -1); } } }; private void registerBoradcastReceiver() { IntentFilter myIntentFilter = new IntentFilter(); myIntentFilter.addAction("NetworkDiscon"); // 注冊廣播 context.registerReceiver(mBroadcastReceiver, myIntentFilter); } @Override public void OnAnyChatObjectEvent(int dwObjectType, int dwObjectId, int dwEventType, int dwParam1, int dwParam2, int dwParam3, int dwParam4, String strParam) { Log.e("OnAnyChatObjectEvent", "----------------"); switch (dwEventType) { // 營業廳數據同步,回調一次返回一個營業廳對象id(有多少營業廳回調多少次) case AnyChatObjectDefine.ANYCHAT_OBJECT_EVENT_UPDATE: // 裝入集合 mobject.add(dwObjectId); break; // 進入營業廳結果回調 case AnyChatObjectDefine.ANYCHAT_AREA_EVENT_ENTERRESULT: AnyChatEnterAreaResult(dwObjectType, dwObjectId, dwParam1); break; case AnyChatObjectDefine.ANYCHAT_AREA_EVENT_LEAVERESULT: Log.e(TAG, "退出營業廳"); context.finish(); break; // 數據同步完成回調 case AnyChatObjectDefine.ANYCHAT_OBJECT_EVENT_SYNCDATAFINISH: DataFinshed(dwObjectType); break; case AnyChatObjectDefine.ANYCHAT_QUEUE_EVENT_ENTERRESULT: break; case AnyChatObjectDefine.ANYCHAT_QUEUE_EVENT_STATUSCHANGE: updateCallBack.onUpdateQueueInfo(dwObjectId); break; } } // 進入營業廳的回調,跳轉到業務列表 private void AnyChatEnterAreaResult(int dwObjectType, int dwObjectId, int dwParam1) { // dwParam1 進入營業廳返回結果,0表示進入營業廳成功 Log.e(TAG, "TAG:" + "dwObjectType:" + dwObjectType + ";dwObjectId:" + dwObjectId + ";dwParam1:" + dwParam1); // 客戶角色 if (entity.userType == 0) { startDeal(); // 座席角色 } } private void DataFinshed(int dwObjectType) { Log.e("TAG", "dwObjectType:" + dwObjectType); if (dwObjectType == AnyChatObjectDefine.ANYCHAT_OBJECT_TYPE_AREA) { // 適配器的數據獲取 List<String> list = new ArrayList<String>(); for (int index = 0; index < mobject.size(); index++) { String name = AnyChatCoreSDK.ObjectGetStringValue( AnyChatObjectDefine.ANYCHAT_OBJECT_TYPE_AREA, mobject.get(index), AnyChatObjectDefine.ANYCHAT_OBJECT_INFO_NAME); list.add(name); Log.e("TAG", "TAG:" + index + "; name:" + name); } roomCallBack.getAnyChat_GetFunRoom(mobject); } } /** * 根據配置文件配置視頻參數 */ private void ApplyVideoConfig() { ConfigEntity configEntity = ConfigService.LoadConfig(context); if (configEntity.configMode == 1) // 自定義視頻參數配置 { // 設置本地視頻編碼的碼率(如果碼率為0,則表示使用質量優先模式) AnyChatCoreSDK.SetSDKOptionInt( AnyChatDefine.BRAC_SO_LOCALVIDEO_BITRATECTRL, configEntity.videoBitrate); if (configEntity.videoBitrate == 0) { // 設置本地視頻編碼的質量 AnyChatCoreSDK.SetSDKOptionInt( AnyChatDefine.BRAC_SO_LOCALVIDEO_QUALITYCTRL, configEntity.videoQuality); } // 設置本地視頻編碼的幀率 AnyChatCoreSDK.SetSDKOptionInt( AnyChatDefine.BRAC_SO_LOCALVIDEO_FPSCTRL, configEntity.videoFps); // 設置本地視頻編碼的關鍵幀間隔 AnyChatCoreSDK.SetSDKOptionInt( AnyChatDefine.BRAC_SO_LOCALVIDEO_GOPCTRL, configEntity.videoFps * 4); // 設置本地視頻采集分辨率 AnyChatCoreSDK.SetSDKOptionInt( AnyChatDefine.BRAC_SO_LOCALVIDEO_WIDTHCTRL, configEntity.resolution_width); AnyChatCoreSDK.SetSDKOptionInt( AnyChatDefine.BRAC_SO_LOCALVIDEO_HEIGHTCTRL, configEntity.resolution_height); // 設置視頻編碼預設參數(值越大,編碼質量越高,占用CPU資源也會越高) AnyChatCoreSDK.SetSDKOptionInt( AnyChatDefine.BRAC_SO_LOCALVIDEO_PRESETCTRL, configEntity.videoPreset); } // 讓視頻參數生效 AnyChatCoreSDK.SetSDKOptionInt( AnyChatDefine.BRAC_SO_LOCALVIDEO_APPLYPARAM, configEntity.configMode); // P2P設置 AnyChatCoreSDK.SetSDKOptionInt( AnyChatDefine.BRAC_SO_NETWORK_P2PPOLITIC, configEntity.enableP2P); // 本地視頻Overlay模式設置 AnyChatCoreSDK.SetSDKOptionInt( AnyChatDefine.BRAC_SO_LOCALVIDEO_OVERLAY, configEntity.videoOverlay); // 回音消除設置 AnyChatCoreSDK.SetSDKOptionInt(AnyChatDefine.BRAC_SO_AUDIO_ECHOCTRL, configEntity.enableAEC); // 平台硬件編碼設置 AnyChatCoreSDK.SetSDKOptionInt( AnyChatDefine.BRAC_SO_CORESDK_USEHWCODEC, configEntity.useHWCodec); // 視頻旋轉模式設置 AnyChatCoreSDK.SetSDKOptionInt( AnyChatDefine.BRAC_SO_LOCALVIDEO_ROTATECTRL, configEntity.videorotatemode); // 本地視頻采集偏色修正設置 AnyChatCoreSDK.SetSDKOptionInt( AnyChatDefine.BRAC_SO_LOCALVIDEO_FIXCOLORDEVIA, configEntity.fixcolordeviation); // 視頻GPU渲染設置 AnyChatCoreSDK.SetSDKOptionInt( AnyChatDefine.BRAC_SO_VIDEOSHOW_GPUDIRECTRENDER, configEntity.videoShowGPURender); // 本地視頻自動旋轉設置 AnyChatCoreSDK.SetSDKOptionInt( AnyChatDefine.BRAC_SO_LOCALVIDEO_AUTOROTATION, configEntity.videoAutoRotation); } @Override public void OnAnyChatVideoCallEvent(int dwEventType, int dwUserId, int dwErrorCode, int dwFlags, int dwParam, String userStr) { Log.e("OnAnyChatVideoCallEvent", "dwEventType:" + dwEventType + ";dwErrorCode:" + dwErrorCode); switch (dwEventType) { case AnyChatDefine.BRAC_VIDEOCALL_EVENT_REQUEST: // 呼叫請求事件 BussinessCenter.getBussinessCenter().onVideoCallRequest(dwUserId, dwFlags, dwParam, userStr); entity.targetUserName = anyChatSDK.GetUserName(dwUserId); Dialog dialog = DialogFactory.getDialog(DialogFactory.DIALOGID_REQUEST, dwUserId, context,entity); dialog.show(); break; case AnyChatDefine.BRAC_VIDEOCALL_EVENT_REPLY: // 呼叫成功的時候的所做出的反應; Log.e("queueactivity", "呼叫成功等待對方反應的回調"); BussinessCenter.getBussinessCenter().onVideoCallReply(dwUserId, dwErrorCode, dwFlags, dwParam, userStr, videoCallBack); if (dwErrorCode == AnyChatDefine.BRAC_ERRORCODE_SUCCESS) { } else { } break; case AnyChatDefine.BRAC_VIDEOCALL_EVENT_START: Log.e("queueactivity", "會話開始回調"); entity.TargetUserId = dwUserId; entity.RoomId = dwParam; BussinessCenter.getBussinessCenter().stopSessionMusic(); videoCallBack.onAnyChat_VieoResult(dwUserId); break; } } /** * 用戶當前狀態 * * @author Administrator * */ public interface AnyChat_LoginCallBack { public void getLoginStatus(LoginStatus status, int dwUserId); } /** * 返回營業廳ID * * @author Administrator * */ public interface AnyChat_GetFunRoomCallBack { public void getAnyChat_GetFunRoom(List<Integer> list); } /** * 立即辦理 */ public void startDeal() { queueIds = AnyChatCoreSDK .ObjectGetIdList(AnyChatObjectDefine.ANYCHAT_OBJECT_TYPE_QUEUE); for (int i = 0; i < queueIds.length; i++) { String name = AnyChatCoreSDK.ObjectGetStringValue( AnyChatObjectDefine.ANYCHAT_OBJECT_TYPE_QUEUE, queueIds[i], AnyChatObjectDefine.ANYCHAT_OBJECT_INFO_NAME); int number = AnyChatCoreSDK.ObjectGetIntValue( AnyChatObjectDefine.ANYCHAT_OBJECT_TYPE_QUEUE, queueIds[i], AnyChatObjectDefine.ANYCHAT_QUEUE_INFO_LENGTH); Log.e("TAG", "業務字符名稱:" + name + ";業務排隊人數:" + number); } if (queueIds != null && queueIds.length != 0) { entity.CurrentQueueId = (queueIds[0]); // 進入隊列的控制指令 AnyChatCoreSDK.ObjectControl( AnyChatObjectDefine.ANYCHAT_OBJECT_TYPE_QUEUE, queueIds[0], AnyChatObjectDefine.ANYCHAT_QUEUE_CTRL_USERENTER, 0, 0, 0, 0, ""); } else { entity.CurrentQueueId = 0; // 進入隊列的控制指令 AnyChatCoreSDK.ObjectControl( AnyChatObjectDefine.ANYCHAT_OBJECT_TYPE_QUEUE, 0, AnyChatObjectDefine.ANYCHAT_QUEUE_CTRL_USERENTER, 0, 0, 0, 0, ""); } } public interface AnyChat_UpdateQueueInfoCallBack { public void onUpdateQueueInfo(int dwObjectId); } public interface AnyChat_VideoResultCallBack { public void onAnyChat_VieoResult(int obj); } }
這段代碼是將官方Demo中的登陸和排隊部分放到一塊,調用之后可以直接實現登陸、排隊功能
AnyChatBaseEvent接口:這個接口是AnyChat最重要的接口,用戶登陸、退出、房間所在人數都是有這個接口來控制;
AnyChatObjectEvent接口:這個接口是用來接收客服對象的接口;
OnAnyChatVideoCallEvent接口:這個接口是接收呼叫信息的接口,AnyChat_VideoResultCallBack是我自定義的接口來處理后台服務器發送的服務請求
這部分變動需要將BussinessCenter類中的參數做些改動,當相對較小,待會再后面貼上源碼
③下面是在Activity中的調用:
package com.bankeys.shield.activity; import java.util.List; import java.util.Timer; import java.util.TimerTask; import android.app.AlertDialog; import android.app.Dialog; import android.content.DialogInterface; import android.content.Intent; import android.os.Handler; import android.os.Message; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import android.widget.TextView; import com.bairuitech.anychat.AnyChatCoreSDK; import com.bairuitech.anychat.AnyChatObjectDefine; import com.bairuitech.common.BaseMethod; import com.bairuitech.main.AnyChat_Login; import com.bairuitech.main.AnyChat_Login.AnyChat_GetFunRoomCallBack; import com.bairuitech.main.AnyChat_Login.AnyChat_LoginCallBack; import com.bairuitech.main.AnyChat_Login.AnyChat_UpdateQueueInfoCallBack; import com.bairuitech.main.AnyChat_Login.AnyChat_VideoResultCallBack; import com.bairuitech.main.AnyChat_Login.LoginStatus; import com.bairuitech.main.BussinessCenter; import com.bairuitech.main.QueueInfoEntity; import com.bankeys.base.ShieldBaseActivity; import com.bankeys.shield.R; import com.bankeys.shield.util.BksUtils; import com.bankeys.shield.view.AlerDialogTools; import com.bankeys.util.LogUtil; public class VideoQueueActivity extends ShieldBaseActivity { private Button quickButton; private TextView showTextView; private TextView timeshow; private final int TIME_UPDATE = 291; // Handler發送消息,隊列人數的實時更新 private AnyChat_Login login; private int USER_TYPE_ID; // 0代表是進入客戶界面,2代表是接入座席界面 private QueueInfoEntity entity; private Dialog mDialog; private String appCode; private String applyId; @Override protected int getLayoutId() { return R.layout.activity_queue; } @Override protected void initLayout() { entity = QueueInfoEntity.getQueueInfoEntity(); appCode = getIntent().getStringExtra(BksUtils.APPCODE); applyId = getIntent().getStringExtra(BksUtils.APPLYID); startLogin(); initView(); } @Override protected CharSequence setTitle() { return getResources().getString(R.string.remote_attestation); } private void initView() { int length = AnyChatCoreSDK.ObjectGetIntValue(AnyChatObjectDefine.ANYCHAT_OBJECT_TYPE_QUEUE, entity.CurrentQueueId, AnyChatObjectDefine.ANYCHAT_QUEUE_INFO_LENGTH); // 排在自己前面的人數 int morder = AnyChatCoreSDK.ObjectGetIntValue(AnyChatObjectDefine.ANYCHAT_OBJECT_TYPE_QUEUE, entity.CurrentQueueId, AnyChatObjectDefine.ANYCHAT_QUEUE_INFO_BEFOREUSERNUM); showTextView = (TextView) findViewById(R.id.queue_show); showTextView.setText("當前排隊人數共:" + length + "人,您現在排在第 " + (morder + 1) + " 位"); LogUtil.debug(""); // 實時更新顯示時間 timeshow = (TextView) findViewById(R.id.queue_time); final Handler myhHandler = new Handler(new Handler.Callback() { @Override public boolean handleMessage(Message msg) { if (msg.what == TIME_UPDATE) { int seconds = AnyChatCoreSDK.ObjectGetIntValue( AnyChatObjectDefine.ANYCHAT_OBJECT_TYPE_QUEUE, entity.CurrentQueueId, AnyChatObjectDefine.ANYCHAT_QUEUE_INFO_WAITTIMESECOND); timeshow.setText("您已等待了 " + BaseMethod.getTimeShowStringTwo(seconds)); } return false; } }); new Timer().schedule(new TimerTask() { @Override public void run() { myhHandler.sendEmptyMessage(TIME_UPDATE); } }, 0, 1000); quickButton = (Button) findViewById(R.id.queue_btn); quickButton.setOnClickListener(new OnClickListener() { public void onClick(View v) { alertDialog(); } }); } private void startLogin() { login = new AnyChat_Login(this, BksUtils.getTermId(this), applyId); login.setAnyChat_LoginCallBack(new AnyChat_LoginCallBack() { @Override public void getLoginStatus(LoginStatus status, int dwUserId) { switch (status) { case Reconnection: case Waiting: mDialog = AlerDialogTools.showWaitingDialog(VideoQueueActivity.this, "正在登陸,請稍候", false); mDialog.show(); break; case Success: entity.userType = USER_TYPE_ID; if (mDialog != null && mDialog.isShowing()) { mDialog.dismiss(); } break; case NoNet: default: if (mDialog != null && mDialog.isShowing()) { mDialog.dismiss(); } break; } } }); login.setAnyChat_GetFunRoom(new AnyChat_GetFunRoomCallBack() { @Override public void getAnyChat_GetFunRoom(List<Integer> list) { AnyChatCoreSDK.ObjectControl(AnyChatObjectDefine.ANYCHAT_OBJECT_TYPE_AREA, list.get(0), AnyChatObjectDefine.ANYCHAT_AREA_CTRL_USERENTER, 0, 0, 0, 0, ""); String termId = BksUtils.getTermId(VideoQueueActivity.this); try { String s = termId.substring(termId.length() - 1,termId.length()); int ox = Integer.parseInt(s); if(list.size() > 1){ entity.CurrentAreaId = list.get(ox / 2); }else{ entity.CurrentAreaId = list.get(0); //營業廳ID } } catch (Exception e) { entity.CurrentAreaId = list.get(0); //營業廳ID } } }); login.setUpdateCallBack(new AnyChat_UpdateQueueInfoCallBack() { @Override public void onUpdateQueueInfo(int dwObjectId) { dataChange(dwObjectId); } }); login.setVideoCallBack(new AnyChat_VideoResultCallBack() { @Override public void onAnyChat_VieoResult(final int dwUserId) { Intent intent = new Intent(VideoQueueActivity.this, VideoCallActivity.class); intent.putExtra(BksUtils.APPLYID, applyId); intent.putExtra(BksUtils.APPCODE, appCode); startActivityForResult(intent, 0); } }); login.loginAnyChat(); } private void alertDialog() { AlertDialog.Builder builder = new AlertDialog.Builder(VideoQueueActivity.this); builder.setMessage("您確定要退出當前排隊嗎?").setPositiveButton("確定", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { AnyChatCoreSDK.ObjectControl(AnyChatObjectDefine.ANYCHAT_OBJECT_TYPE_QUEUE, entity.CurrentQueueId, AnyChatObjectDefine.ANYCHAT_QUEUE_CTRL_USERLEAVE, 0, 0, 0, 0, ""); finish(); } }).setNegativeButton("取消", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { } }).create().show(); } private void dataChange(int dwObjectId) { if (dwObjectId == entity.CurrentQueueId) { int length = AnyChatCoreSDK.ObjectGetIntValue(AnyChatObjectDefine.ANYCHAT_OBJECT_TYPE_QUEUE, dwObjectId, AnyChatObjectDefine.ANYCHAT_QUEUE_INFO_LENGTH); int mbefore = AnyChatCoreSDK.ObjectGetIntValue(AnyChatObjectDefine.ANYCHAT_OBJECT_TYPE_QUEUE, dwObjectId, AnyChatObjectDefine.ANYCHAT_QUEUE_INFO_BEFOREUSERNUM); showTextView.setText("當前排隊人數共:" + length + "人,您現在排在第 " + (mbefore + 1) + " 位"); } } @Override protected void onDestroy() { super.onDestroy(); login.onDestroy(); BussinessCenter.getBussinessCenter().realse(); } @Override protected void onRestart() { super.onRestart(); login.onRestart(); } @Override protected void onActivityResult(int arg0, int arg1, Intent arg2) { // TODO Auto-generated method stub super.onActivityResult(arg0, arg1, arg2); if(arg1 == RESULT_OK){ finish(); } } @Override protected void onResume() { BussinessCenter.mContext = VideoQueueActivity.this; super.onResume(); } }
Activity調用可以根據具體場景做相應的調整,在此就不多說了。
④視頻界面參考官方Demo,我只是稍加變動而已,就不在這里一一展示,如果需要項目源碼可以給我留郵箱。
