У меня есть функция в моем проекте, которая позволяет пользователю записывать и воспроизводить звуковые заметки, которые хранятся локально. Если я задаю статическое имя для файла, все будет хорошо. Если я пытаюсь установить динамическое имя (например: System.currentTimeMillis()), файл не найден, когда я пытаюсь его воспроизвести. Вот мой код:Невозможно открыть .mp3 аудиозапись java.io.FileNotFoundException
записи бит:
public void startRecording() {
recorder = new MediaRecorder();
recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
recorder.setOutputFormat(output_formats[currentFormat]);
// recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
recorder.setOutputFile(getFileRecording());
recorder.setOnErrorListener(errorListener);
recorder.setOnInfoListener(infoListener);
try {
recorder.prepare();
recorder.start();
isRecording = true;
showRecordingUI();
handler.post(updateVisualizer);
} catch (IllegalStateException e) {
Log.e("Recording ::::: ", e.getMessage());
e.printStackTrace();
} catch (IOException e) {
Log.e("Recording :: ", e.getMessage());
e.printStackTrace();
}
BuildDev.logDebug("WE ARE RECORDING!!!");
}
и настройки имени файла (статическое имя):
private String getFileRecording() {
recordingFilepath = Environment.getExternalStorageDirectory().getPath();
File file = new File(recordingFilepath, AUDIO_RECORDER_FOLDER);
if (!file.exists()) {
file.mkdirs();
}
String fileName = "12345"
return (file.getAbsolutePath() + "/" + fileName + file_exts[currentFormat]);
}
это путь, который я получаю, когда я отладки:
/storage/emulated/0/everreach_audio_notes//12345.mp3
и не динамический вариант, который, кажется, не работает:
private String getFileRecording() {
recordingFilepath = Environment.getExternalStorageDirectory().getPath();
File file = new File(recordingFilepath, AUDIO_RECORDER_FOLDER);
if (!file.exists()) {
file.mkdirs();
}
String fileName = String.valueOf(System.currentTimeMillis();
return (file.getAbsolutePath() + "/" + "/" + fileName + file_exts[currentFormat]);
}
которые дают мне следующий путь:
/storage/emulated/0/everreach_audio_notes//1476878040697.mp3
Когда я пытаюсь воспроизвести звуковой файл с именем динамическим, я получаю эту ошибку:
W/System.err: java.io.FileNotFoundException: /storage/emulated/0/everreach_audio_notes/11476880948244.mp3: open failed: ENOENT (No such file or directory)
at java.io.FileInputStream.<init>(FileInputStream.java:76)
at java.io.FileInputStream.<init>(FileInputStream.java:103)
call_info.RecordingsListAdapter.startPlaying(RecordingsListAdapter.java:190)
call_info.RecordingsListAdapter.access$500(RecordingsListAdapter.java:36)
call_info.RecordingsListAdapter$2.onClick(RecordingsListAdapter.java:125)
at android.view.View.performClick(View.java:4861)
at android.view.View$PerformClick.run(View.java:19980)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:211)
at android.app.ActivityThread.main(ActivityThread.java:5373)
at java.lang.reflect.Method.invoke(Native Method)
at java.lang.reflect.Method.invoke(Method.java:372)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1020)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:815)
Caused by: android.system.ErrnoException: open failed: ENOENT (No such file or directory)
at libcore.io.Posix.open(Native Method)
at libcore.io.BlockGuardOs.open(BlockGuardOs.java:186)
at libcore.io.IoBridge.open(IoBridge.java:451)
Попробуйте удалить одну косую черту дорожка? У вас /storage/emulated/0/audio_notes/1476878040697.mp3? – krossovochkin
не запускается. Попробуйте прочитать из файла, полученного другим способом, чем упомянутый здесь? Обратите внимание, что он пытается открыть файл в каталоге everreach_audio_notes, а не audio_notes –
Привет, premek, извините, что это была опечатка на моей стороне. –