Android Q,如何用正确的文件名用MediaStore保存录音?

Android Q, how to save audio recording with MediaStore with the correct file name?

我想将用我的应用程序录制的 mp3 文件存储到带有 MediaStore 的音乐文件夹中,用于 Android 10 的新 "Scoped Storage"。
此方法效果很好,但文件以时间戳命名(例如 1576253519449),没有 .mp3 扩展名。
如果我使用文件管理器手动添加扩展名,文件会被正确记录。
我如何使用 fileName + ".mp3" 来命名文件?

String fileName; //Obtained by intent
MediaRecorder audioRecorder;
Uri audiouri;
ParcelFileDescriptor file;

private void startRecording() throws IOException {
    ContentValues values = new ContentValues(4);
    values.put(MediaStore.Audio.Media.TITLE, fileName);
    values.put(MediaStore.Audio.Media.DATE_ADDED, (int) (System.currentTimeMillis() / 1000));
    values.put(MediaStore.Audio.Media.MIME_TYPE, "audio/mp3");
    values.put(MediaStore.Audio.Media.RELATIVE_PATH, "Music/Recordings/");

    audiouri = getContentResolver().insert(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, values);
    file = getContentResolver().openFileDescriptor(audiouri, "w");

    if (file != null) {
        audioRecorder = new MediaRecorder();
        audioRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
        audioRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
        audioRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);
        audioRecorder.setOutputFile(file.getFileDescriptor());
        audioRecorder.setAudioChannels(1);
        audioRecorder.prepare();
        audioRecorder.start();
    }
}

另一个问题:MediaStore.Audio.Media.RELATIVE_PATH 仅适用于 Android 10。 如何保持与旧版本的追溯兼容性?

编辑:
为了向后兼容,您可以直接删除 values.put(MediaStore.Audio.Media.RELATIVE_PATH, "Music/Recordings/");:文件将直接保存在 Music 目录中。
或者使用 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) 仅在 Android 10.

上添加子目录

正如@blackapps 所建议的,可以使用 DISPLAY_NAME 属性.