调整检测连麦对话框位置

修复一处闪退问题
This commit is contained in:
2022-11-25 17:48:47 +08:00
parent 4a9a8c3ec3
commit 4eb9adad78
13 changed files with 39 additions and 37 deletions

View File

@@ -18,7 +18,8 @@ public class LiveUserGiftBean extends UserBean {
private int guardType;
private int nub;
public LiveUserGiftBean() {
}
public int getNub() {
return nub;

View File

@@ -0,0 +1,175 @@
package com.yunbao.common.utils;
import android.app.Dialog;
import android.content.Context;
import android.os.Handler;
import android.os.Looper;
import android.util.Log;
import com.yunbao.common.CommonAppConfig;
import com.yunbao.common.bean.BaseModel;
import com.yunbao.common.http.API;
import com.yunbao.common.http.HttpCallback;
import com.yunbao.common.http.HttpClient;
import com.yunbao.common.http.ResponseModel;
import cn.rongcloud.rtc.api.RCRTCEngine;
import cn.rongcloud.rtc.api.callback.IRCRTCResultCallback;
import cn.rongcloud.rtc.api.callback.IRCRTCSwitchRoleCallback;
import cn.rongcloud.rtc.base.RTCErrorCode;
import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.functions.Consumer;
import io.reactivex.schedulers.Schedulers;
/**
* 统一管理连麦状态
*/
public class MicStatusManager {
public static final int MIC_TYPE_DEFAULT = 0;//默认状态,未连麦
public static final int MIC_TYPE_REQUEST = 1;//请求连麦中
public static final int MIC_TYPE_OPEN = 2;//连麦中
private static MicStatusManager manager;
private int micStatus;//连麦状态
private String micLiveId;//主播uid
private boolean anchorOpenRoom = false;//主播是否开启连麦房
public static MicStatusManager getInstance() {
if (manager == null) {
manager = new MicStatusManager();
}
return manager;
}
private MicStatusManager() {
}
public void setMicData(int micStatus, String micLiveId) {
this.micLiveId = micLiveId;
this.micStatus = micStatus;
}
public boolean isAnchorOpenRoom() {
return anchorOpenRoom;
}
public void setAnchorOpenRoom(boolean anchorOpenRoom) {
this.anchorOpenRoom = anchorOpenRoom;
}
public void clear() {
micStatus = 0;
micLiveId = "";
}
public int getMicStatus() {
return micStatus;
}
public String getMicLiveId() {
return micLiveId;
}
@Override
public String toString() {
return "MicStatusManager{" +
"micStatus=" + micStatus +
", micLiveId='" + micLiveId + '\'' +
'}';
}
/**
* 断开连麦
*/
public void downMic() {
HttpClient.getInstance().get("live.leaveDrLm", "live.leaveDrLm")
.params("roomid", micLiveId)
.params("uid", CommonAppConfig.getInstance().getUid())
.execute(new HttpCallback() {
@Override
public void onSuccess(int code, String msg, String[] info) {
Log.e("ry", code + "退出多人");
RCRTCEngine.getInstance().getRoom().getLocalUser().switchToAudience(new IRCRTCSwitchRoleCallback() {
/**
* 当切换失败且SDK处于无法回退状态时回调该角色已经无法使用当前角色继续进行音视频。
* SDK内部会退出房间并清理所有资源该用户只能重新加入房间才能继续音视频。
*/
@Override
public void onKicked() {
}
@Override
public void onSuccess() {
Log.e("ry", "下麦成功");
// 该用户切换为观众成功,可以以观众身份进行音视频
//退出rtc播放
RCRTCEngine.getInstance().leaveRoom(new IRCRTCResultCallback() {
@Override
public void onSuccess() {
Log.e("ry", "退出多人房间成功");
new Handler(Looper.getMainLooper()).post(new Runnable() {
public void run() {
MicStatusManager.getInstance().clear();
ToastUtil.show("已成功退出語音連麥");
}
});
}
@Override
public void onFailed(RTCErrorCode errorCode) {
Log.e("ry", errorCode + "退出多人房间成功");
}
});
}
/**
* 当切换失败且不影响当前角色继续音视频时回调
* @param errorCode 失败错误码
*/
@Override
public void onFailed(RTCErrorCode errorCode) {
Log.e("ry", "下麦失败" + errorCode);
}
});
}
});
}
/**
* 主播关闭连麦权限
*/
public void closeMic(Context mContext) {
API.get().pdLiveApi(mContext)
.delDrLm()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Consumer<ResponseModel<BaseModel>>() {
@Override
public void accept(ResponseModel<BaseModel> stringResponseModel) throws Exception {
System.out.println("stringResponseModel.getData() = " + stringResponseModel.getData());
anchorOpenRoom = false;
}
}, Throwable::printStackTrace)
.isDisposed();
}
public boolean isMic() {
return micStatus == MIC_TYPE_OPEN;
}
/**
* 显示退出连麦状态对话框
*/
public void showDownMicDialog(Context context) {
DialogUitl.showSimpleDialog(context, "當前正在連麥中,是否退出連麥", new DialogUitl.SimpleCallback() {
@Override
public void onConfirmClick(Dialog dialog, String content) {
downMic();
}
});
}
}

View File

@@ -5,6 +5,7 @@ import android.content.Intent;
import com.alibaba.android.arouter.launcher.ARouter;
import com.yunbao.common.CommonAppConfig;
import com.yunbao.common.CommonAppContext;
import com.yunbao.common.Constants;
import com.yunbao.common.HtmlConfig;
import com.yunbao.common.bean.LiveBean;
@@ -185,6 +186,10 @@ public class RouteUtil {
* 打开直播页面
*/
public static void forwardLiveAudienceActivity(LiveBean mLiveBean, int mLiveType, int mLiveSDK, int mLiveTypeVal) {
if(MicStatusManager.getInstance().isMic()){
MicStatusManager.getInstance().showDownMicDialog(CommonAppContext.sInstance);
return;
}
ARouter.getInstance().build(PATH_LIVE_AUDIENCE)
.withBoolean(Constants.NEW_ENTER_ROOM, false)
.withParcelable(Constants.LIVE_BEAN, mLiveBean)