如果 Android API 级别低于 26,如何将存储访问框架与 MediaMuxer 一起使用

Posted

技术标签:

【中文标题】如果 Android API 级别低于 26,如何将存储访问框架与 MediaMuxer 一起使用【英文标题】:How to use Storage Access Framework with MediaMuxer if Android API level less than 26 【发布时间】:2019-12-21 02:27:42 【问题描述】:

我正在创建一个要通过 android MediaMuxer 录制的文件,并且我想将此文件存储在我在可移动 SD 卡中指定的任何文件夹中(不仅在 /Android/data/data/application 中)。

如果Android API级别在26以上,我可以使用SAF(Storage Access Framework)来实现。

var fd: FileDesciptor? = null

for (permission in activity.contentResolver.persistedUriPermissions) 
    if (permission.uri.path == "path/to/file") 
        val docFile = DocumentFile.fromTreeUri(activity, permission.uri)!!.
                createFile("video/mp4", "test.mp4")
        fd = activity.contentResolver.
                openFileDescriptor(docFile!!.uri, "w")!!.
                fileDesciptor
        break
    


val muxer = MediaMuxer(fd, MediaMuxer.OutputFormat.MUXER_OUTPUT_MPEG_4)

但文件描述符版本构造函数

public MediaMuxer(@NonNull FileDescriptor fd, @Format int format) throws IOException 

如果 API 级别

只有文件路径版本

public MediaMuxer(@NonNull String path, @Format int format) throws IOException 

我可以使用。

但在获得新加坡武装部队许可的情况下,我无法获得真正的路径。

docFile.uri.path // this gives me a path with strange prefix.

那么,如果 Android API 级别低于 26,我是否可以通过 MediaMuxer 在可移动 SD 卡中指定的任何文件夹中录制文件?

【问题讨论】:

【参考方案1】:

我和你有同样的问题,没有任何帮助。但可能有一些解决方法。

您可以将文件录制到内部存储中,当录制结束时,您可以使用 SAF 将录制文件复制到可移动 SD 中

【讨论】:

以上是关于如果 Android API 级别低于 26,如何将存储访问框架与 MediaMuxer 一起使用的主要内容,如果未能解决你的问题,请参考以下文章

从 API 级别 < Android 26 (Oreo) 的 RGB 值创建颜色对象

API 级别低于 9 的 android:filterTouchesWhenObscured 的类似物

如何修复 Android 中的“调用需要 API 级别 26(当前最低为 25)”错误

Android Play 商店最低目标 API 26

蓝牙低能耗清单

API 级别低于 21 的状态栏颜色不变