1. 程式人生 > >融雲集成3--增刪會話介面點選+號出現的模組ExtensionModule

融雲集成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) {
    }
}