更新时间: 2021-03-08
# 功能描述
SDK 支持添加、修改、删除扩展板上的每一个扩展项,包括修改扩展项的图片、文案以及点击之后的响应事件处理。
# 内置扩展项
IMKit SDK 内部默认集成了 图库 和 文件 插件. 融云还提供了其他插件, 直接集成使用即可.
# 扩展项介绍
名称 | 类 |
---|---|
FilePlugin | 文件 |
ImagePlugin | 图库 |
SightPlugin | 小视频 |
AudioPlugin | 语音通话 |
VideoPlugin | 视频通话 |
DefaultLocationPlugin | 位置 |
# 增删扩展项
- 创建
MyExtensionModule
继承自 DefaultExtensionModule,复写其中的getPluginModules()
方法, 增加或删除扩展项.
public class MyExtensionModule extends DefaultExtensionModule { @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(); // 以删除 FilePlugin 为例 if (integer instanceof FilePlugin) { iterator.remove(); } } // 增加扩展项, 以 ImagePlugin 为例 pluginModules.add(new ConectionPlugin()); return pluginModules; } }
已复制
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
- SDK 初始化之后,注销默认的 ExtensionModule,注册自定义的
MyExtensionModule
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()); } } }
已复制
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 自定义扩展项
- 创建
MyPlugin
实现 IPluginModule。
public class MyPlugin implements IPluginModule { @Override public void onClick(Fragment currentFragment, RongExtension extension) { super.onClick(currentFragment,extension); // 扩展性监听回调 } }
已复制
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
- 添加自定义扩展项可参考 增删扩展项
# 点击扩展项
# 监听所有扩展项点击事件
创建 MyConversationFragment
继承 ConversationFragment ,重写 onPluginClicked
方法, 该方法会在 Plugin 被点击时调用, 并回传 Plugin 的信息。
# 修改 SDK 内置扩展项监听
- 继承已有的插件,并重写
onClick
方法. 以 VideoPlugin 为例:
public class MyVideoPlugin extends VideoPlugin { @Override public void onClick(Fragment currentFragment, RongExtension extension) { Toast.makeText(currentFragment.getContext(), "我被点击了", Toast.LENGTH_LONG).show(); super.onClick(currentFragment,extension); } }
已复制
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
- 删除之前的扩展项, 添加新创建的扩展项
public class MyExtensionModule extends DefaultExtensionModule { @Override public List<IPluginModule> getPluginModules(Conversation.ConversationType conversationType) { List<IPluginModule> pluginModules = new ArrayList<>(); pluginModules.add(new ImagePlugin()); pluginModules.add(new MyVideoPlugin()); return pluginModules; } }
已复制
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
- 请参考 增删扩展项 第二步.