安卓 11 (R,API level 30) 视频录制存储相关适配

问题描述:安卓 11 使用 MediaRecorder 录制视频,由于新的分区存储特性(Scoped Storage,APP 产生的文件只能通过 MediaStore API 写入磁盘),存储路径无法直接使用外部 SD 卡的路径。

问题解决思路:

a. 使用应用内部存储路径 getExternalFilesDir(null), 真实路径为 "/storage/emulated/0/Android/data/<your package name>/"

  • 视频录制完成后可以根据需要再写入分区存储。

  • 由于内部存储路径又导致 MediaMetadataRetriever 获取视频第一帧的功能无法使用

    • 解决思路:
    media.setDataSource(getContentResolver().openFileDescriptor(Uri.fromFile(new File(urlPath)), "r").getFileDescriptor());
    

b. MediaRecorder 设置存储路径的方法 setOutputFile 可以接受 FileDescriptor 对象,利用 ContentResolver 和 MediaStore 获得外部存储路径的 FileDescriptor,就可以使用外部分区存储的路径录制了。

其他

a. 相关链接:安卓开发者文档-访问共享存储空间中的媒体文件
b. 相关链接:关于Android Q分区存储的一些适配心得
c. 相关链接:Android Q, how to save audio recording with MediaStore with the correct file name?
d. 个人网站:蜂鸟之歌

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容