最近公司新上的app要加上即时通信的功能, 本身快速实现一个固然是不可能的了(项目deadline也顶不住哇).就从各家成熟的SDK厂商选来选去的, 各有各的好也各有各的不足.最后点兵点将,选了融云家的SDK(老板说了算hhhh).
他家的官网和文档地址:
官网:https://www.rongcloud.cn/
文档:https://docs.rongcloud.cn/v4java
Android 10 适配
前言
为了让用户更好地控制本身的文件,并限制文件混乱的状况,Android 10(Q) 修改了 APP 访问外部存储中文件的方法。外部存储的新特性被称为 Scoped Storage。android
Android 10(Q) 仍然使用 READ_EXTERNAL_STORAGE 和 WRITE_EXTERNAL_STORAGE 做为面向用户的存储相关运行时权限,但如今即便获取了这些权限,访问外部存储也受到了限制。APP 须要这些运行时权限的情景发生了变化,且各类状况下外部存储对 APP 的可见性也发生了变化 在 Scoped Storage 新特性中,外部存储空间被分为两部分:app
● 公共目录:Downloads、Documents、Pictures 、DCIM、Movies、Music、Ringtones 等ide
公共目录下的文件在 APP 卸载后,不会删除。ui
APP 能够经过 SAF(System Access Framework)、MediaStore 接口访问其中的文件。this
● App-specific 目录code
APP 卸载后,数据会清除。视频
APP 的私密目录,APP 访问本身的 App-specific 目录时无需任何权限。接口
融云关于 Android 10(Q)适配
以前 SDK 将媒体文件存储于 /sdcard/RongCloud/Media 中,因此在 android 10(Q) 系统上会有聊天没法使用的状况,新版本更新后,会将媒体消息存储于 :sdcard/Android/data/包名/files/ 中,以保证 sdk 功能的正常使用ci
用户须要作的适配工做
1.若是您是 kit 的用户,咱们对融云基本消息类型进行了全面兼容,若是您自定义了媒体消息,建议您在点击自定义媒体消息时,对本地文件进行检查,若是本地文件流没法读取,调用 RongIM 的 downloadMediaMessage() 方法从新下载更新本地路径
示例代码
//1.判断小视频本地文件是否存在 if (sightMessage.getLocalPath() != null && !TextUtils.isEmpty(sightMessage.getLocalPath().toString())) { return FileUtils.isFileExistsWithUri(this, sightMessage.getLocalPath()); } else { return false; } //2.调用 downloadMediaMessage 下载文件刷新 ui RongIM.getInstance().downloadMediaMessage(mMessage, downloadMediaMessageCallback);
2.若是您是 lib 的用户,建议您在用户使用到媒体类型消息时,对消息体中的 localPath 进行判断检查,若是本地文件流没法正常访问,请调用 RongIMClient 的 downloadMediaMessage() 方法对媒体文件进行从新下载并更新本地路径,具体代买可参考以上代码进行具体调整
备注
文件存储路径变化
不开启 rc_q_storage_mode_enable 的各类文件保存路径 //使用sight模块录制小视频时 录制视频:sdcard/sdcard/RongCloud/Image/应用名/image/ 下载音频 /sdcard/RongCloud/Media 下载视频 /sdcard/RongCloud/Media 下载文件 /sdcard/RongCloud/Media 下载 gif /sdcard/RongCloud/Media 自定义媒体文件 /sdcard/RongCloud/Media 开启 rc_q_storage_mode_enable 的各类文件保存路径 //使用sight模块录制小视频时 录制视频:sdcard/Android/data/包名/files/RongCloud/video/ 下载音频:sdcard/Android/data/包名/files/RongCloud/audio/ 下载视频:sdcard/Android/data/包名/files/RongCloud/video/ 下载文件:sdcard/Android/data/包名/files/RongCloud/file/ 下载 gif:sdcard/Android/data/包名/files/RongCloud/image/ 自定义媒体文件 会根据媒体类型存储到以上目录中