先上官网链接
先看看我的项目需求,图如下,要求视频语音在不同条件下显示不同图片和不同的点击效果
上代码在Application融云init之后添加
private void registerExtensionPlugin() {
List<IExtensionModule> moduleList = RongExtensionManager.getInstance().getExtensionModules();
IExtensionModule defaultModule = null;
if (moduleList != null) {
for (IExtensionModule module : moduleList) {
if (module instanceof DefaultExtensionModule) {
defaultModule = module;
break;
}
}
if (defaultModule != null) {
RongExtensionManager.getInstance().unregisterExtensionModule(defaultModule);
RongExtensionManager.getInstance().registerExtensionModule(new MyExtensionModule());
}
}
}
接着
public class MyExtensionModule extends DefaultExtensionModule {
@Override
public List<IPluginModule> getPluginModules(Conversation.ConversationType conversationType) {
List<IPluginModule> pluginModuleList = new ArrayList<>();
//自定义扩展栏有的功能,直接添加可以替换不用先删除
pluginModuleList.add(new MyAudioPlugin());//语音
pluginModuleList.add(new MyVideoPlugin());//视频
//也可以完全自己定义其他功能
return pluginModuleList;
}
}
自定义MyAudioPlugin代码,MyVideoPlugin同理
public class MyVideoPlugin implements IPluginModule {
@Override
public Drawable obtainDrawable(Context context) {
//判断图片的显示 ConversationActivity为会话界面 isMutualFollow是其中的变量
return ContextCompat.getDrawable(context, ConversationActivity.isMutualFollow?R.mipmap.ic_chat_video2:R.mipmap.ic_chat_video1);
}
@Override
public String obtainTitle(Context context) {//扩展栏中标题
return "视频";
}
@Override
public void onClick(Fragment fragment, RongExtension rongExtension) {
//判断点击的不同效果 ConversationActivity为会话界面 isBlack是其中的变量
if (ConversationActivity.isBlack==2||ConversationActivity.isBlack==3){
PublicUtils.showShortToast(fragment.getActivity(),"您已被对方拉黑,无法发送消息");
return ;
}
if (ConversationActivity.isMutualFollow){
//语音功能
RongCallKit.startSingleCall(fragment.getActivity(),
rongExtension.getTargetId(), RongCallKit.CallMediaType.CALL_MEDIA_TYPE_VIDEO);
}else {
PublicUtils.showShortToast(fragment.getActivity(),"互相关注后才能使用哦");
}
}
}
发送消息监听(发送按钮)
//发送消息监听
RongIM.getInstance().setSendMessageListener(new RongIM.OnSendMessageListener() {
// 发送消息之前会走此方法. message 为要发送的消息,
// 如果返回 null 的话, 就不会发送此消息了.
@Override
public Message onSend(Message message) {
**在此进行发送前的判断**
return message;
}
//发送成功之后会走方法. 返回 true , 就会走 SDK 的后续逻辑. 返回 false 就拦截了.
@Override
public boolean onSent(Message message, RongIM.SentMessageErrorCode sentMessageErrorCode) {
return false;
}
});
上面看官网都能弄出来,不过有前人的整理在结合官网文档能少走不少弯路。