Android 11在文件存储和访问方面引入了多个更改。显然,其中一个更改是无法将输出目标指向“/dev/null”(我的情况实际上正是在这个旧问题中解释的)。
尽管引用的问题解决了特定问题,但仍有一个问题没有回答:Android 11中类似于'/dev/null'的等效物是什么。也就是说,如果不需要特定操作的输出(在我们的情况下,是创建一个很大的文件的操作),应该如何处理。
Android 11在文件存储和访问方面引入了多个更改。显然,其中一个更改是无法将输出目标指向“/dev/null”(我的情况实际上正是在这个旧问题中解释的)。
尽管引用的问题解决了特定问题,但仍有一个问题没有回答:Android 11中类似于'/dev/null'的等效物是什么。也就是说,如果不需要特定操作的输出(在我们的情况下,是创建一个很大的文件的操作),应该如何处理。
MediaRecorder
问题,但也可以推广到其他情况):fun MediaRecorder.setOutputFile(context: Context) {
val tmpRecordingFolder = File(context.filesDir, "tmp_media")
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
setOutputFile(File(tmpRecordingFolder, "recording.mp3"))
} else {
setOutputFile("/dev/null")
}
}
基本上我正在将输出设置为内部存储。希望文件不会变得过大,并且我正在尽可能多地在代码中删除文件。这似乎适用于较新的设备,目前还没有遇到存储问题,但解决方案尚未推出到生产环境。如果有问题,我会更新我的答案。
我曾经遇到过同样的问题,你必须指定一个路径,因为在Android 11中,如果你没有提供路径,MediaRecorder将会崩溃。为了避免写入大量数据,你可以尝试通过停止/重新启动MediaRecorder来刷新文件。我也处理了几天这个问题。
我在这里回答了更详细的答案: MediaRecorder Android 11 start failed -1004