问题描述
Android 11 对文件存储和访问进行了多项更改。显然其中之一是不能再将输出定位到“/dev/null”(我的场景实际上在此 old question 中得到了准确解释)。
尽管所引用的问题解决了特定问题,但有一件事仍未得到解答: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")
}
}
基本上我将输出设置在内部存储中。我希望文件不会变得很大,我会在代码中尽可能多的地方删除文件。这似乎适用于较新的设备,目前还没有遇到存储问题,但该解决方案尚未推广到生产中。如果发现问题,将更新我的答案。