如何为录音库创建自定义文件路径?
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;
}
这样做,您将始终为您的文件使用不同的名称。
我正在尝试将我的录音保存到 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;
}
这样做,您将始终为您的文件使用不同的名称。