最近公司新上的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/ 自定義媒體文件 會根據媒體類型存儲到以上目錄中