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

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

该篇文章将解决的问题:

1、如何发送视频功能

2、未完待续。。 

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

一、如何发送视频

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

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

   官方提供发送视频方法:

  主要修改在EaseChatFragment.java文件中

  ①、首先找到

     很明显,这就是会话界面扩展功能,分别用于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 搜索 找到如下位置:

  可以看到这里已经有了拍照,相册,位置三个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下

  requestCode 变量 REQUEST_CODE_VIDEO 定义

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

  注:这里做个限制,视频大小上限为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;
    }

  结束。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏C语言及其他语言

【程序源码】猜拳游戏

关注我们 今天来给大家来一段游戏源码(猜拳游戏) ? 程序截图如上。话不多说,上源码!! #include <stdio.h> #include <stdlib...

3066
来自专栏技术博客

Win8中缩放视图(SemanticZoom控件)

    SemanticZoom控件可以让用户缩放具有相同内容的两个不同视图。其中有一个是主视图。另外一个视图可以让用户进行快速导航。例如,当用户查看地址簿时,...

691
来自专栏慎独

AVPlayer初体验之视频解纹理

6004
来自专栏性能与架构

将 Redis 作为图数据库

1. 简介 Redis 在 4.0 中正式支持了Module模块系统,使其可以进行丰富的扩展 图数据库的应用越来越广泛,RedisGraph 就是一个 Redi...

4406
来自专栏较真的前端

探寻Vue数据双向绑定的底层原理

2675
来自专栏HT

基于HTML5 Canvas的工控SCADA模拟飞机飞行

昨天看到一篇文章说是学习如何开飞机的,然后我就想,如果我也可以开飞机那就好玩了,每个人小时候都想做飞行员!中国飞行员太难当了,再说也不轻易让你开飞机!后来我就想...

2219
来自专栏慎独

Unity自动寻路入门指南

1702
来自专栏葬爱家族

Android高级动画(3)

上一篇文章我们讲了Android中的矢量动画,虽然文中展示的Demo并不多,但是相信大家还是体会到了矢量动画的强大。这里再做一个温故总结:

1511
来自专栏移动端开发

AVFoundation 框架初探究(四)

叨叨两句 ----       动手写这篇总结时候也是二月底过完年回来上班了,又开始新的一年了,今年会是什么样子?这问题可能得年底再回答自己了。在家窝了那么久,...

3456
来自专栏Flutter入门

Android OpenGL ES(六) - 将输入源换成视频

上文中,我们是将相机提供的预览画面输入到Surface当中,然后进行滤镜处理和录制。 那我们可以切换输入源为视频吗?

5325

扫码关注云+社区

领取腾讯云代金券