环信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;
}
结束。
作者:听着music睡
出处:http://www.cnblogs.com/xqxacm/
Android交流群:38197636
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
2014-09-11 安卓开发_浅谈ListView(自定义适配器)