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

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

问题解决思路:

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

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

  • 由于内部存储路径又导致 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. 个人网站:蜂鸟之歌

你可能感兴趣的:(安卓 11 (R,API level 30) 视频录制存储相关适配)