功能模块(投票,文档,抽奖,弹幕,只看主播等) - mengzhuSDK/MengzhuSDK_Android GitHub Wiki
VoteDialogFragment voteDialogFragment = (VoteDialogFragment) getFragmentManager().findFragmentByTag("VOTEDIALOGFRAGMENT");
if (null == voteDialogFragment) {
voteDialogFragment = VoteDialogFragment.newInstance(mPlayInfoDto);
}
if (!voteDialogFragment.isAdded() && !voteDialogFragment.isVisible() && !voteDialogFragment.isRemoving()) {
voteDialogFragment.show(getFragmentManager(), "VOTEDIALOGFRAGMENT");
}
ChannelDlnaDialogFragment dlanDialogFragment = (ChannelDlnaDialogFragment) getFragmentManager().findFragmentByTag("DLANDIALOGFRAGMENT");
if (null == dlanDialogFragment) {
ChannelDlnaDialogFragment.Builder builder = new ChannelDlnaDialogFragment.Builder(mActivity);
builder.setOnDeviceItemSelectListener(new ChannelDlnaDialogFragment.OnDeviceItemSelectListener() {
@Override
public void onSelectDevice() {
startDlan();
}
});
builder.setTitleTextColor(getResources().getColor(R.color.color_782d16));
builder.setTopRightBtnVisible(View.VISIBLE);
dlanDialogFragment = builder.build();
}
if (!dlanDialogFragment.isAdded() && !dlanDialogFragment.isVisible() && !dlanDialogFragment.isRemoving()) {
dlanDialogFragment.show(getFragmentManager(), "DLANDIALOGFRAGMENT");
}
ViewDocumentFragment mViewDocumentFragment = ViewDocumentFragment.newInstance(PlayInfoDto playInfoDto, boolean isShow //是否显示关闭按钮);
com.mengzhu.live.sdk.core.utils.FileUtils.getDocumentPptFile() //获取文档下载存放路径 /**
* 读取文档ppt目录的所有文件
*
* @param files 返回的所有文件
* @param filePath 路径(可传入sd卡路径)
* @return
*/
com.mengzhu.live.sdk.core.utils.FileUtils.getSuffixFile(List<File> files, String filePath) // 获取路径下的所有文档文件
MZChatManager.getInstance(mActivity).registerListener(CLASSNAME, new MZChatMessagerListener() {
@Override
public void dataResult(Object obj, Page page, int status) {
}
@Override
public void errorResult(int code, String msg) {
}
@Override
public void monitorInformResult(String type, Object obj, Object extend) {
}
@Override
public void monitorInformResult(String s, Object o) {
ChatMessageDto mChatMessage = (ChatMessageDto) o;
ChatTextDto mChatText = mChatMessage.getText();
BaseDto mBase = mChatText.getBaseDto();
switch (s) {
case ChatMessageObserver.CMD_TYPE:
ChatCmdDto mChatCmd = (ChatCmdDto) mBase;
switch (mChatCmd.getType()) {
case ChatPresenter.DOCSWITCHPAGE:
// 翻页
ArrayList<String> list = new ArrayList<>();
list.add(mChatCmd.getUrl());
if (mViewDocumentFragment != null) {
mViewDocumentFragment.initViewPager(list); mViewDocumentFragment.setDocumentName(mChatCmd.getFile_name());
}
break;
}
break;
}
}
@Override
public void monitorInformError(String s, int i, String s1) {
}
});
private void initWindow(){
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
int widthPixels = getResources().getDisplayMetrics().widthPixels;
int width = (int) (widthPixels * 0.8f);
int type;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O){//8.0+
type = WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY;
}else {
type = WindowManager.LayoutParams.TYPE_PHONE;
}
mWindowVideoContainer = new FrameLayout(this);
mFloatWindow = new FloatWindow(this, mWindowVideoContainer,
new FloatWindowParams()
.setWindowType(type)
.setX(100)
.setY(400)
.setWidth(width)
.setHeight(width*9/16));
mFloatWindow.setBackgroundColor(Color.BLACK);
}
private void windowPlay() {
if(!mFloatWindow.isWindowShow()){
mFloatWindow.setElevationShadow(20);
if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP)
mFloatWindow.setRoundRectShape(50);
mFloatWindow.show();
ViewParent parent = mzPlayerView.getParent();
if(parent!=null && parent instanceof ViewGroup){
((ViewGroup) parent).removeView(mzPlayerView);
}
mWindowVideoContainer.addView(mzPlayerView,
new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.MATCH_PARENT));
}
}
public void showSignDialog(){
if (signInfoBean == null || mActivity == null || signDialogShowing)
return;
final SignInWebFragment signInWebFragment = new SignInWebFragment(mActivity , mPlayInfoDto , signInfoBean);
signInWebFragment.setSignInOutSideDismiss(false);
signInWebFragment.setOnDismissListener(new SignInWebFragment.OnDismissListener() {
@Override
public void onDismiss(boolean isSign) {
signDialogShowing = false;
signInWebFragment.onDestroy();
if (isSign){
mIvSignIn.setImageResource(R.mipmap.icon_mz_signed);
}
}
});
PreferencesUtils.savePrefBoolean(mActivity,mPlayInfoDto.getTicket_id() +signInfoBean.getSign_id() + mPlayInfoDto.getUnique_id(),true);
signInWebFragment.showAtLocation(mActivity.findViewById(android.R.id.content), Gravity.CENTER, 0, 0);
signDialogShowing = true;
}
//消息弹幕监听
public void receiveSendDanmaku(Object obj) {
ChatMessageDto mChatMessage = (ChatMessageDto) obj;
ChatTextDto mChatText = mChatMessage.getText();
ChatMegTxtDto megTxtDto = (ChatMegTxtDto) mChatText.getBaseDto();
boolean isSelf = megTxtDto.getUniqueID().equals(MyUserInfoPresenter.getInstance().getUserInfo().getUniqueID());
if (isSelf) {
mzPlayerView.setDanmakuCustomTextColor(getResources().getColor(R.color.color_fff45c));
//消息文本 , 直播状态 , 头像,弹幕样式
mzPlayerView.sendDanmaku(mChatText.getUser_name() + ": " + megTxtDto.getText(), liveStatus == 1, mChatText.getAvatar(), new DanmakuViewCacheStuffer(mActivity, mzPlayerView.getDanmakuView()));
} else {
mzPlayerView.setDanmakuCustomTextColor(getResources().getColor(R.color.white));
mzPlayerView.sendDanmaku(mChatText.getUser_name() + ": " + megTxtDto.getText(), liveStatus == 1, mChatText.getAvatar(), new DanmakuViewCacheStuffer(mActivity, mzPlayerView.getDanmakuView()));
}
}
控制台配置活动观看的权限方式白名单,F码等,前端源码封装可直接使用,使用方式如下:
MZWatchAuthPopWindow uthPopWindow = new MZWatchAuthPopWindow(this, mTicketId, phone);
authPopWindow.setOnCheckResultListener(new MZWatchAuthPopWindow.OnCheckResultListener() {
@Override
public void onSuccess() {
//权限验证成功 进入观看页
}
@Override
public void onFailed() {
//权限验证失败
finish();
}
});
authPopWindow.showAtLocation(getWindow().getDecorView(), Gravity.BOTTOM, 0, 0);
具体封装和使用可查看MZMediaSDK 的MZWatchAuthPopWindow查看源码以及调用方式
控制台配置抽奖,前台封装web加载,具体使用方式如下:
/**
* 抽奖弹窗
*/
public void showLottoDialog(){
MZLottoWebFragment lottoWebFragment = new MZLottoWebFragment(mActivity,lottoBean,"抽奖");
lottoWebFragment.setLottoOutSideDismiss(true);
lottoWebFragment.setOnDismissListener(new PopupWindow.OnDismissListener() {
@Override
public void onDismiss() {
}
});
lottoWebFragment.showAtLocation(mActivity.findViewById(android.R.id.content), Gravity.CENTER, 0, 0);
}
// 控制台消息控制 ChatPresenter.WEBINAR_VIEW_CONFIG_UPDATE: //弹幕,禁言,防录屏,等配置开关
对应type类型为
case PlayInfoDto.PRIZE:
mPlayInfoDto.setLottoShow(isOpen);
break;
控制显示与否
具体封装和使用可查看MZMediaSDK 的HalfPlayerFragment查看源码以及调用方式
// 设置主播uid,通过获取主播信息接口回去
public void setAnchorUid(String anchorUid)
// 获取当前是否开启只看主播功能
public boolean isOnlyAnchor()
//打开或关闭只看主播功能 更改会触发回调事件
public void setOnlyAnchor(boolean onlyAnchor)
//注册只看主播开关监听回调
public void registerChangeIsOnlyAnchorListener(String key , ChatPresenter.OnChangeISOnlyAnchorListener listener)
// 取消监听
public void removeListener(String key)
// 注册只看主播切换监听事件
MZChatManager.getInstance(mActivity).registerChangeIsOnlyAnchorListener(PlayerChatListFragment.class.getSimpleName() , changeISOnlyAnchorListener);
ChatPresenter.OnChangeISOnlyAnchorListener changeISOnlyAnchorListener = new ChatPresenter.OnChangeISOnlyAnchorListener() {
@Override
public void changeIsOnlyAnchor(boolean isOnlyAnchor, List<ChatMessageDto> messageList) {
// isOnlyAnchor 是否是只看主播 messageList切换后的列表数据
}
};
具体使用方式可参考MZMediaSDK 中的PlayerChatListFragment 使用方式