什么是 Android 11 的“/dev/null”等价物

Bor*_*jev 8 android dev-null android-11

Android 11 对文件存储和访问进行了多项更改。显然,其中之一是不能再将输出定位到“/dev/null”(我的场景实际上在这个老问题中得到了准确解释)。

尽管引用的问题解决了特定问题,但有一件事仍未得到解答:Android 11 相当于“/dev/null”是什么。也就是说,如果不需要特定操作的输出(在我们的例子中,它是一个创建大文件的操作)。

Bor*_*jev 2

最终我最终通过以下方式解决了我的问题(针对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")
    }
}
Run Code Online (Sandbox Code Playgroud)

基本上我将输出设置在内部存储器中。我希望该文件不会变得很大,并且我将在代码中尽可能多的位置删除该文件。这似乎适用于较新的设备,目前也尚未遇到存储问题,但该解决方案尚未投入生产。如果发现问题,将更新我的答案。