融雲集成3--增刪會話界面點擊+號出現的模塊ExtensionModule

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,刪除紅包模塊

首先,我們看看IExtensionModule的實現結構,他只有兩個實現類,DefaultExtensionModule就是默認展示在輸入擴展框裏面的模塊(這裏麪包含了圖片,文件,定位等插件);另一個就是單獨的發紅包模塊。

這裏寫圖片描述

//重新設置會話界面的ExtensionModule
private void resetExtensionPlugin() {
        List<IExtensionModule> extensionModules = RongExtensionManager.getInstance().getExtensionModules();
        IExtensionModule defaultExtensionModule = null;
        IExtensionModule redPackageModule = null;
        for (int i = 0; i < extensionModules.size(); i++) {
            IExtensionModule module = extensionModules.get(i);
            //取出默認的模塊
            if (module instanceof DefaultExtensionModule) {
                defaultExtensionModule = module;
            } else if (module instanceof JrmfExtensionModule) {
                //取出紅包模塊
                redPackageModule = module;
            }
        }
        if (defaultExtensionModule != null) {
 //刪除默認展示的模塊
RongExtensionManager.getInstance().unregisterExtensionModule(defaultExtensionModule);
        }
        if (redPackageModule != null) {
//刪除紅包模塊
RongExtensionManager.getInstance().unregisterExtensionModule(redPackageModule);
        }
//註冊自定義的模塊
RongExtensionManager.getInstance().registerExtensionModule(new MyExtensionModule());
    }
    }

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) {
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章