• 环信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;
        }

       

      结束。

      

      

       

  • 相关阅读:
    初识AOP与动态代理
    Java读取打印机自定义纸张.
    通过邮箱发送html报表
    Java 代码质量
    JAVA学习笔记--匿名内部类
    JAVA学习笔记--简介几个常见关键字static、final、this、super
    JAVA学习笔记--迭代器
    JAVA学习笔记--初识容器类库
    JAVA学习笔记--策略设计模式与适配器模式
    JAVA学习笔记--接口
  • 原文地址:https://www.cnblogs.com/xqxacm/p/9626080.html
Copyright © 2020-2023  润新知