我正在尝试将录音保存到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");
}
}
解决方案:
我找到了解决问题的办法。问题出在两个符号上:“:”代表时间,“ /”代表日期。这些标志用于创建文件的路径,而媒体播放器在查找正确的路径时遇到了问题。
答案 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;
}
这样做,您将始终为文件使用其他名称。