Android CallKit 如何根据不同的权限显示隐藏会话页面音视频通话按钮

即CallKit模块的AudioPlugin和VideoPlugin。 比如老师和学生,医生和患者,根据用户的userId和权限显示和隐藏AudioPlugin和VideoPlugin
发布时间: 2019-06-12 10:43

回答:

1.在Rong SDK init之后

2.IMKit提供了IExtensionProxy接口,在进入会话页面,加载扩展区域plugin之前IMKit sdk会回调此接口,开发者可以实现此接口,根据不同的权限移除不需要的plugin。

示例代码如下

/**
 * IExtensionProxy为 Extension 代理
 * 进入会话,加载 Extension 前回调此类,可以根据对应的回调方法进行相应的修改调整;
 * 请调用 {@link RongExtensionManager#setExtensionProxy(IExtensionProxy)} 进行设置;
 * 请在 Application 初始化时设置,已保证显示不会错乱。
 */
RongExtensionManager.setExtensionProxy(new IExtensionProxy() {
    /**
     * 进入会话,预加载 plugin 列表时回调
     * 1. 可以对 plugin list 进行:增、删、调整位置修改
     * 2. plugin list 修改后,RongExtension 会加载修改后的列表并展示
     *
     * @param conversationType 所在会话类型
     * @param targetId         会话 ID
     * @param pluginModuleList plugin 列表,可对此列表进行修改
     */
    @Override
    public void onPreLoadPlugins(Conversation.ConversationType conversationType, String targetId, List<IPluginModule> pluginModuleList) {
        //去掉“学生1”同学(登录账号)和“老师1”的会话页面AudioPlugin 和 VideoPlugin
        if (conversationType.equals(Conversation.ConversationType.PRIVATE) 
              && targetId.equals("老师1")) {
            for (Iterator iterator = pluginModuleList.iterator(); iterator.hasNext(); ) {
                IPluginModule plugin = (IPluginModule) iterator.next();
                if (plugin.getClass().getCanonicalName().contains("AudioPlugin")
                     || plugin.getClass().getCanonicalName().contains("VideoPlugin")) {
                    iterator.remove();
                }
            }
        }
    }

    /**
     * 进入会话,预加载 Emoticon 时回调
     * 此方法会被多次回调,没加载一个 IExtensionModule 就会回调一次
     * 当此方法被执行时,如果不想加载此 module,需要返回 null。
     *
     * @param conversationType 所在会话类型
     * @param targetId         会话 ID
     * @return 处理后的 module;返回 null 则不展示此 module
     */
    @Override
    public IExtensionModule onPreLoadEmoticons(Conversation.ConversationType conversationType, String targetId, IExtensionModule extensionModule) {
        return extensionModule;
    }
});


3.注意,IExtensionProxy接口是融云 SDK 2.9.4以上版本新增