如何为录音库创建自定义文件路径?

How to create custom file path for recordings base?

我正在尝试将我的录音保存到 Room 数据库中,这几乎没问题,但我不知道如何创建自己的文件路径来保存多个文件。到目前为止,我试过在文件末尾添加日期和我自己的文件名,但没有用。如果我保存标准路径然后按播放它会起作用,但我只能保存一个文件(相同路径)。如果我尝试创建自己的路径,我在日志中有信息:Log.e(TAG, "prepare() failed");

设置:

 private void setupMediaRecorder() {
    filePath = Environment.getExternalStorageDirectory().getAbsolutePath() + File.separator + "myRecording.3gpp";
    File file = new File(filePath);
    mediaRecorder = new MediaRecorder();
    mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
    mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
    mediaRecorder.setAudioEncoder(MediaRecorder.OutputFormat.AMR_NB);
    mediaRecorder.setOutputFile(file);
}

保存:

saveButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            name = String.valueOf(nameEditText.getText());
            Recording recording = new Recording(name, filePath, length, currentDate);
            mainViewModel.insertRecording(recording);
            getDialog().dismiss();
        }
    });

播放:

private void play() {

    playing = true;

    playbackButton.setImageResource(R.drawable.ic_pause_black_true_24dp);

    mediaPlayer = new MediaPlayer();
    try {
        mediaPlayer.setDataSource(filePath);
        mediaPlayer.prepare();
        mediaPlayer.start();
        Toast.makeText(getContext(), "Playing...", Toast.LENGTH_SHORT).show();
        Log.d(TAG, filePath);
    } catch (Exception e) {
        Log.e(TAG, "prepare() failed");
    }
}

解决方案:

我找到了问题的解决方案。问题出在两个符号上:“:”表示时间,“/”表示日期。这些标志用于创建文件路径,媒体播放器在找到正确路径时遇到问题。

获取当前日期和时间,然后将其用作文件名。

private void setupMediaRecorder() { 
    filePath = Environment.getExternalStorageDirectory().toString() + File.separator + getDateAndTime()+".3gpp"; 
    File file = new File(filePath);
    mediaRecorder = new MediaRecorder();
    mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
    mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
    mediaRecorder.setAudioEncoder(MediaRecorder.OutputFormat.AMR_NB);
    mediaRecorder.setOutputFile(file);        
}

private String getDateAndTime(){
    @SuppressLint("SimpleDateFormat") DateFormat dfDate = new SimpleDateFormat("yyyyMMdd");
    String date=dfDate.format(Calendar.getInstance().getTime());
    @SuppressLint("SimpleDateFormat") DateFormat dfTime = new SimpleDateFormat("HHmm");
    String time = dfTime.format(Calendar.getInstance().getTime());
    return date + "-" + time;
}

这样做,您将始终为您的文件使用不同的名称。