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

时间:2019-06-30 12:47:55

标签: android android-room android-mediarecorder

我正在尝试将录音保存到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");
    }
}

解决方案:

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

1 个答案:

答案 0 :(得分:2)

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

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;
}

这样做,您将始终为文件使用其他名称。