1.如果我们把所有的包都导入项目,那么融云会通过反射的方式去判断是否有某个类来判断是否存在语音或者其他插件,有的话就会默认显示在会话界面的ExtensionModule模块,也就是图中的RongExtension;
2.如果我们不需要这么多功能:
自定义一个 ExtensionModule 继承自 DefaultExtensionModule,复写其中的 getPluginModules() 方法,返回需要展示的 plugin 列表。如:
下面是融云已经实现了的一些插件
/**
* Created by longShun on 2017/2/22.
* desc 只展示发送图片的功能插件
*/
public class MyExtensionModule extends DefaultExtensionModule {
@Override
public List<IPluginModule> getPluginModules(Conversation.ConversationType conversationType) {
List<IPluginModule> pluginModules = super.getPluginModules(conversationType);
//清空所有的插件
pluginModules.clear();
//添加一个图片发送插件
pluginModules.add(new ImagePlugin());
//如果需要增加的话,那么同理,在这个集合中添加需要的插件
return pluginModules;
}
}
3.最后一步,替换调默认的ExtensionModule就ok了
//重新设置会话界面的ExtensionModule
private void resetExtensionPlugin() {
List<IExtensionModule> extensionModules = RongExtensionManager.getInstance().getExtensionModules();
for (int i = 0; i < extensionModules.size(); i++) {
IExtensionModule module = extensionModules.get(i);
if (module instanceof DefaultExtensionModule){
//解除默认的ExtensionModule
RongExtensionManager.getInstance().unregisterExtensionModule(module);
//注册我们自己定义的ExtensionModule
RongExtensionManager.getInstance().registerExtensionModule(new MyExtensionModule());
break;
}
}
}
4.如果你想要添加自定义的插件
自定义 Plugin 并实现 IPluginModule。 如:
public class MyPlugin implements IPluginModule {
…
}
仿照下面这个图片插件来写就行了,也就几个方法,返回图片和标题,以及点击事件,
//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by Fernflower decompiler)
//
package io.rong.imkit.plugin;
import android.content.Context;
import android.content.Intent;
import android.graphics.drawable.Drawable;
import android.support.v4.app.Fragment;
import android.support.v4.content.ContextCompat;
import io.rong.imkit.RongExtension;
import io.rong.imkit.R.drawable;
import io.rong.imkit.R.string;
import io.rong.imkit.plugin.IPluginModule;
import io.rong.imkit.plugin.image.PictureSelectorActivity;
import io.rong.imkit.utilities.PermissionCheckUtil;
import io.rong.imlib.model.Conversation.ConversationType;
public class ImagePlugin implements IPluginModule {
ConversationType conversationType;
String targetId;
public ImagePlugin() {
}
public Drawable obtainDrawable(Context context) {
return ContextCompat.getDrawable(context, drawable.rc_ext_plugin_image_selector);
}
public String obtainTitle(Context context) {
return context.getString(string.rc_plugin_image);
}
public void onClick(Fragment currentFragment, RongExtension extension) {
String[] permissions = new String[]{"android.permission.READ_EXTERNAL_STORAGE"};
if(PermissionCheckUtil.requestPermissions(currentFragment, permissions)) {
this.conversationType = extension.getConversationType();
this.targetId = extension.getTargetId();
Intent intent = new Intent(currentFragment.getActivity(), PictureSelectorActivity.class);
extension.startActivityForPluginResult(intent, 23, this);
}
}
public void onActivityResult(int requestCode, int resultCode, Intent data) {
}
}
作者:u010378579 发表于2017/2/22 16:36:17 原文链接
阅读:60 评论:0 查看评论