删除拓展区域的plugin

删除拓展区域的plugin
发布时间: 2018-03-22 19:35

回答:

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());
        }
    }
}



我对此仍有疑问!继续追问