ImagePlugin(图片)和FilePlugin(文件)是SDK默认添加到拓展区的,其它的plugin开发者也可以自定义,如果开发者想要删除按照以下步骤:
方案一:
第一步:自定义一个 ExtensionModule 继承自 DefaultExtensionModule,复写其中的 getPluginModules() 方法:
例如:
public class LiaoBaExtensionModule extends DefaultExtensionModule {
private EditText mEditText;
@Override
public void onAttachedToExtension(RongExtension extension) {
super.onAttachedToExtension(extension);
mEditText = extension.getInputEditText();
}
@Override
public void onDetachedFromExtension() {
super.onDetachedFromExtension();
mEditText = null;
}
@Override
public List<IPluginModule> getPluginModules(Conversation.ConversationType conversationType) {
List<IPluginModule> pluginModules = super.getPluginModules(conversationType);
ListIterator<IPluginModule> iterator = pluginModules.listIterator();
while (iterator.hasNext()) {
IPluginModule integer = iterator.next();
if (integer instanceof FilePlugin) {
iterator.remove();
}
}
pluginModules.add(new ConectionPlugin());
return pluginModules;
}
}
注意:在删除FilePlugin的时候如果用下面这种增强for循环的方式,会抛异常java.util.ConcurrentModificationException。
for (IPluginModule module : pluginModules) {
if (module instanceof FilePlugin) {
pluginModules.remove(module);
}
}
第二步:SDK在Application的onCreate()方法初始化之后,取消 SDK 默认的 ExtensionModule,注册自定义的 ExtensionModule
例如:在init之后,在Application的onCreate()方法中调用下面方法:
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 LiaoBaExtensionModule());
}
}
}
方案二:
自定义ConversationFragment 继承自ConversationFragment,获取RongExtensionon,在Resume 中调用
4.x sdk
@Override
public void onResume() {
super.onResume();
List<IPluginModule> pluginModules = mRongExtension.getPluginModules(); //获取当前所有 Plugin 列表
mRongExtension.addPlugin(new CustomPlugin()); //增加某个plugin
for (int i = 0; i < pluginModules.size(); i++) {
if (pluginModules.get(i) instanceof FilePlugin){
mRongExtension.removePlugin(pluginModules.get(i) ); //删除个plugin
}
}
}
5.xsdk
@Override
public void onResume() {
super.onResume();
mRongExtension.getPluginBoard().addPlugin(new AudioPlugin()); //增加某个plugin
List<IPluginModule> pluginModules = mRongExtension.getPluginBoard().getPluginModules();
for (int i = 0; i < pluginModules.size(); i++) {
if (pluginModules.get(i) instanceof FilePlugin){
mRongExtension.getPluginBoard().removePlugin(pluginModules.get(i) ); //删除个plugin
}
}
}