Как создать собственный путь к файлу базы записей? - PullRequest
0 голосов
/ 30 июня 2019

Я пытаюсь сохранить свои записи в базе данных Room, и это почти нормально, но я не знаю, как создать собственный путь к файлу, чтобы сохранить более одного файла.Я пытался до сих пор просто добавить дату и мое собственное имя файла в конце файла, но это не сработало.Если я сохраняю стандартный путь, а затем нажимаю кнопку воспроизведения, он работает, но я могу сохранить только один файл (тот же путь).Если я пытаюсь создать собственный путь, у меня есть информация в журналах: Log.e (TAG, «prepare () fail»);

Настройка:

 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 Ответ

2 голосов
/ 30 июня 2019

Получите текущую дату и время, затем используйте их в качестве имени файла.

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

При этом вы всегда будете использовать другое имя для вашего файла.

...