Android Q,如何使用MediaStore保存录音?

时间:2019-12-13 17:09:41

标签: android file audio-recording mediastore scoped-storage

我想将用我的应用程序录制的mp3文件存储到MediaStore的“音乐”文件夹中,以用于Android 10的新“范围存储”。
此方法效果很好,但是文件使用时间戳命名(例如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();
    }
}

enter image description here

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

编辑:
为了实现兼容性,您只需删除values.put(MediaStore.Audio.Media.RELATIVE_PATH, "Music/Recordings/");:这些文件将直接保存在“音乐”目录中。
或使用if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q)仅在Android 10上添加子目录。

1 个答案:

答案 0 :(得分:0)

正如@blackapps 建议的那样,可以使用 DISPLAY_NAME 属性。