融云即时通讯 SDK 集成 — 定制 UI(三) ——兼容 Android Q
背景:
最近公司新上的 app 要加上即时通讯的性能, 本人疾速实现一个当然是不可能的了 (我的项目 deadline 也顶不住哇). 就从各家成熟的 SDK 厂商选来选去的, 各有各的好也各有各的有余. 最初点兵点将, 选了融云家的 SDK(老板说了算 hhhh).
他家的官网和文档地址:
官网:https://www.rongcloud.cn/
文档:https://docs.rongcloud.cn/v4
如何兼容 Android Q
Android 10 适配
前言
为了让用户更好地管制本人的文件,并限度文件凌乱的状况,Android 10(Q)批改了 APP 拜访内部存储中文件的办法。内部存储的新个性被称为 Scoped Storage。
Android 10(Q)依然应用 READ_EXTERNAL_STORAGE 和 WRITE_EXTERNAL_STORAGE 作为面向用户的存储相干运行时权限,但当初即便获取了这些权限,拜访内部存储也受到了限度。APP 须要这些运行时权限的情景产生了变动,且各种状况下内部存储对 APP 的可见性也产生了变动 在 Scoped Storage 新个性中,内部存储空间被分为两局部:
● 公共目录:Downloads、Documents、Pictures、DCIM、Movies、Music、Ringtones 等
公共目录下的文件在 APP 卸载后,不会删除。
APP 能够通过 SAF(System Access Framework)、MediaStore 接口拜访其中的文件。
● App-specific 目录
APP 卸载后,数据会革除。
APP 的私密目录,APP 拜访本人的 App-specific 目录时无需任何权限。
融云对于 Android 10(Q)适配
之前 SDK 将媒体文件存储于 /sdcard/RongCloud/Media 中,所以在 android 10(Q)零碎上会有聊天无奈应用的状况,新版本更新后,会将媒体音讯存储于:sdcard/Android/data/ 包名 /files/ 中,以保障 sdk 性能的失常应用
用户须要做的适配工作
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/
自定义媒体文件 会依据媒体类型存储到以上目录中