环信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;
}
结束。
环信easeui集成:坑总结2018(二)的更多相关文章
- 环信easeui集成:坑总结2018
环信EaseUI 集成,集成不做描述,看文档即可,下面主要谈一些对easeui的个性化需求修改. 该篇文章将解决的问题: 1.如何将App用户体系的用户名和用户头像 显示于环信的easeui 2.如何 ...
- 环信EaseUI集成错误 Unknown type name 'NSString' NSLocalizedString
环信集成本来认为很简单的,有现成的UI,照着文档直接傻瓜操作就行,没曾想聊天记录不能长时间保存,于是乎就有了这篇记录环信坑的笔记 在下载的环信的SDK时候里面会有两个包,一个完整版的,一个简洁版的,导 ...
- 李洪强iOS开发之-环信03_集成 SDK 基础功能
李洪强iOS开发之-环信03_集成 SDK 基础功能 集成 SDK 基础功能 在您阅读此文档时,我们假定您已经具备了基础的 iOS 应用开发经验,并能够理解相关基础概念. SDK 同步/异步方法区分 ...
- 环信SDK集成
利用环信SDK可以实现即时通讯,但在集成的过程中碰到了不少的坑. 注意 选择项目路径,这里以最新版环信demo为例 注意:环信的ChatDemoUI这个demo里边因为研发的同事为了照顾老版本的And ...
- laravel 框架接入环信遇到的坑(-)
在脚本中执行判断user表中是否注册环信时,报错: “请求错误:service_resource_not_found Service resource not found ” // 判断环信是否已经 ...
- iOS 环信集成项目应用
环信iOS端3.0版本集成记录--聊天界面篇 环信离线推送证书... 1,环信处在后台的时候,消息的接收与推送 离线发推送 配置属性 EMCallOptions *options = [[EMClie ...
- 环信集成 2---基于环信Demo3.0,实现单聊功能
这几天在做环信,所以把环信相关的东西拿过来,做个系统点的东西 注意: 这里Demo集成的是带有实时语音功能的(libEaseMobClientSDK.a). 环信库是直接拖拽EaseMobSDK文件夹 ...
- apicloud 环信总结
点击链接先查看一下apicloud 环信的文档 https://docs.apicloud.com/Client-API/Open-SDK/easeChat 文档中写了很多,但官方给的文档还是有问题, ...
- iOS 环信集成问题(连文档都不说明的坑。。)
首先,关于环信SDK的下载和一些依赖库的添加,在此我就不做详细介绍,(http://www.easemob.com/download/im)附上环信官网文档,可以看一下,上面都可以下载,也有相关配置介 ...
随机推荐
- AI - 学习路径(Learning Path)
初见 机器学习图解 错过了这一篇,你学机器学习可能要走很多弯路 这3张脑图,带你清晰人工智能学习路线 一些课程 Andrew Ng的网络课程 HomePage:http://www.deeplearn ...
- 【log4j2】log4j的升级版log4j2的简单入门使用
1.jar包 log4j-api.jar + log4j-core.jar maven仓库配置: <dependency> <groupId>org.apache. ...
- ES6常用特性总览
以前看过一遍es6,今天面试时被问到了一个很简单的es6特性,竟然没回答上来,特来重温一下es6,做个总结性笔记. 一.什么是es6 es6是新版本JavaScript语言的标准,在2015年6月发布 ...
- update-rc.d: error: XXX Default-Start contains no runlevels, aborting.
root@hm-saas-db:/etc/init.d# update-rc.d confluence disable update-rc.d: error: confluence Default-S ...
- 项目总结一:情感分类项目(emojify)
一.Emojifier-V1 模型 1. 模型 (1)前向传播过程: (2)损失函数:计算the cross-entropy cost (3)反向传播过程:计算dW,db dz = a - Y_oh[ ...
- centos 7 linux 安装与卸载 tomcat 7
一.声明 本文采用操作系统版本: Centos 7 Linux系统 版本源:CentOS-7-x86_64-DVD-1708.iso 官网下载地址:http://isoredirect.centos. ...
- 32位汇编第五讲,逆向实战干货,(OD)快速定位扫雷内存.
32位第五讲,逆向实战干货,快速定位扫雷内存. 首先,在逆向之前,大家先对OD有一个认识. 一丶OD的使用 标号1: 反汇编窗口 (显示代码的地址,二进制指令,汇编代码,注释) 标号2: 寄存器窗口( ...
- Java中的instanceof和isInstance基础讲解
1. instanceof 是一个操作符 使用方法: ? 1 2 if(a instanceof B){ } 表示:a 是不是 B 这种类型 2. isInstance是Class类的一个方法 ? 1 ...
- 第1章 ssh命令和SSH服务详解
基础服务类系列文章:http://www.cnblogs.com/f-ck-need-u/p/7048359.html 本文对SSH连接验证机制进行了非常详细的分析,还详细介绍了ssh客户端工具的各种 ...
- [JavaScript] promise概述
promise promise 是 es6 提出的一个异步解决方案,比传统回调事件的写法更加合理更加强大,主要还是优雅 promise 有 pending(等待中),fulfilled(已成功),re ...