欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

环信easeui集成:坑总结2018(二)

程序员文章站 2022-11-30 19:46:54
环信EaseUI 集成,集成不做描述,看文档即可,下面主要谈一些对easeui的个性化需求修改。 该篇文章将解决的问题: 1、如何发送视频功能 2、未完待续。。 一、如何发送视频 1、环信easeui 会话功能默认支持图片,拍照,位置 三个功能 想支持播放视频需要自己添加。 官方提供发送视频方法: ......

环信easeui 集成,集成不做描述,看文档即可,下面主要谈一些对easeui的个性化需求修改。

 

该篇文章将解决的问题:

1、如何发送视频功能

2、未完待续。。 

 

-------------------------------------------------------------------------------------------------------------------- 

 

一、如何发送视频

1、环信easeui 会话功能默认支持图片,拍照,位置 三个功能

   想支持播放视频需要自己添加。

   官方提供发送视频方法:

   环信easeui集成:坑总结2018(二)

  主要修改在easechatfragment.java文件中

  ①、首先找到

环信easeui集成:坑总结2018(二)

     很明显,这就是会话界面扩展功能,分别用于item 名称,图片,点击事件id,默认有拍照,相册,位置,这里屏蔽位置功能,添加视频功能

     修改如下:

   // 屏蔽位置消息 , 添加视频消息
    protected int[] itemstrings = { r.string.attach_take_pic, r.string.attach_picture ,r.string.attach_video};
    protected int[] itemdrawables = { r.drawable.ease_chat_takepic_selector, r.drawable.ease_chat_image_selector, r.drawable.ease_chat_image_selector
    };
    protected int[] itemids = { item_take_picture, item_picture ,item_video };

 

      修改之后点击右侧的+按钮,就会发现多了一个视频消息选项

 

  ②、添加视频item功能点击事件

  随便选itemids里面的已有选项比如 item_take_picture , ctrl+f 搜索 找到如下位置:

  环信easeui集成:坑总结2018(二)

  可以看到这里已经有了拍照,相册,位置三个item功能的点击事件,则自己添加视频item点击事件

  case item_video:
       //xqxhx 录制视频
       selectvideo();

 

   ③、通过intent调用视频录制

  类似于拍照功能,这里使用了fileprovider适配7.0+机型,可以查看上一篇文章学习

    /**
     * 录制视频
     */
    private void selectvideo() {
        if (!easecommonutils.issdcardexist()) {
            toast.maketext(getactivity(), r.string.sd_card_does_not_exist, toast.length_short).show();
            return;
        }

        videofile = new file(pathutil.getinstance().getvideopath(), emclient.getinstance().getcurrentuser()
                + system.currenttimemillis() + ".mp4");
        videofile.getparentfile().mkdirs();
        intent intent = new intent(mediastore.action_video_capture);
        if (build.version.sdk_int >= build.version_codes.n){
            intent.putextra(mediastore.extra_output,
                    fileprovider.geturiforfile(getactivity(),"com.maiji.magkaredoctor.fileprovider", videofile));
        }else {
            intent.putextra(mediastore.extra_output, uri.fromfile(videofile));
        }
        startactivityforresult(intent, request_code_video);
    }

 

    videofile 变量定义在camerafile下

    环信easeui集成:坑总结2018(二)

  requestcode 变量 request_code_video 定义

  环信easeui集成:坑总结2018(二)

  ④、调用intent了,再进行intent的回调处理,找到onactivityresult()方法 , 添加对视频的处理

  环信easeui集成:坑总结2018(二)

  注:这里做个限制,视频大小上限为10m,然后执行sendvideomessage()方法,参数分别为视频文件目录,视频缩略图文件目录,视频的时长,方法如下:

  //根据路径得到视频缩略图
    public  string  getvideophoto(string videopath) {
        mediametadataretriever media =new mediametadataretriever();
        media.setdatasource(videopath);
        bitmap bitmap = media.getframeattime();

        string savepath;
        file filepic;

        savepath = pathutil.getinstance().getvideopath().getabsolutepath();

        try {
            filepic = new file(savepath +  emclient.getinstance().getcurrentuser()
                    + system.currenttimemillis() + ".jpg");
            if (!filepic.exists()) {
                filepic.getparentfile().mkdirs();
                filepic.createnewfile();
            }
            fileoutputstream fos = new fileoutputstream(filepic);
            bitmap.compress(bitmap.compressformat.jpeg, 100, fos);
            fos.flush();
            fos.close();
        } catch (ioexception e) {
            // todo auto-generated catch block
            e.printstacktrace();
            return null;
        }

        return filepic.getabsolutepath();
    }

    //获取视频总时长
    public  string getvideoduration(string path){
        mediametadataretriever mmr = new mediametadataretriever();
        mmr.setdatasource(path);
        string duration = mmr.extractmetadata(mediametadataretriever.metadata_key_duration); //
        return duration;
    }

 

   

  结束。