Запишите звук и сохраните в папку данных приложения

Я новичок в программировании, и я хотел бы узнать, как сделать приложение, которое позволяет пользователю записывать звук и, следовательно, сохранять его в папке данных приложения. Мне удалось сделать часть записи, но удалось сохранить ее только на SD-карту. Кто-нибудь готов помочь мне понять, как сохранить звук во внутреннюю память ??

private void playRecording() throws Exception {
    ditchMediaPlayer();
    mediaPlayer = new MediaPlayer();
    mediaPlayer.setDataSource(OUTPUT_FILE);
    mediaPlayer.prepare();
    mediaPlayer.start();
}

private void stopRecording() {
    if(recorder != null)
        recorder.stop();
}

private void beginRecording() throws Exception {
    ditchMediaRecorder();
    File outFile = new File(OUTPUT_FILE);

    if(outFile.exists())
        outFile.delete();

    recorder = new MediaRecorder();
    recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
    recorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
    recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
    recorder.setOutputFile(OUTPUT_FILE);

    recorder.prepare();
    recorder.start();

}

private void ditchMediaRecorder() {
    if (recorder != null)
        recorder.release();
}

  public void recordOnClick(View v) {
      //when record button is pressed
      try{
            beginRecording();
        }catch (Exception e){
            e.printStackTrace();
        }
        btnRecord.setVisibility(View.INVISIBLE);
        btnStop.setVisibility(View.VISIBLE);
  }

  public void stopOnClick(View v) {
      //when stop button is pressed
      try{
            stopRecording();
        }
        catch (Exception e){
            e.printStackTrace();
        }

        btnStop.setVisibility(View.INVISIBLE);
        btnRecord.setVisibility(View.INVISIBLE);

        btnDelete.setVisibility(View.VISIBLE);
        btnPlay.setVisibility(View.VISIBLE);
        btnShare.setVisibility(View.VISIBLE);
  }

  public void playOnClick(View v) {
      //when play button is pressed
        try{
            playRecording();
        }
        catch (Exception e){
            e.printStackTrace();
        }

        btnStop.setVisibility(View.INVISIBLE);
        btnRecord.setVisibility(View.INVISIBLE);
  }

И это мой onClick, где я укажу свой вывод для каждой кнопки (я делаю диаграмму, поэтому у меня около 44 кнопок!)

    public void onClick(View v) {
switch (v.getId()) {

case R.id.btn1:

      OUTPUT_FILE=Environment.getExternalStorageDirectory()+"/y1.3gpp";     
  File file1 = new File(Environment.getExternalStorageDirectory()+"/y1.3gpp");
        if (file1.exists()) {

            btnPlay.setVisibility(View.VISIBLE);
            btnDelete.setVisibility(View.VISIBLE);
            btnShare.setVisibility(View.VISIBLE);
        }
        else {
            btnRecord.setVisibility(View.VISIBLE);
        }   
 break;

case R.id.btn2:

OUTPUT_FILE=Environment.getExternalStorageDirectory()+"/y2.3gpp";   
File file2 = new File(Environment.getExternalStorageDirectory()+ "/y2.3gpp" );
        if (file2.exists()) {

            btnPlay.setVisibility(View.VISIBLE);
            btnDelete.setVisibility(View.VISIBLE);
            btnShare.setVisibility(View.VISIBLE);
        }
        else {
            btnRecord.setVisibility(View.VISIBLE);
        }   

 break;

person Becky Reyna    schedule 11.01.2013    source источник


Ответы (3)


может быть, вы хотели бы взглянуть на это? Создание папки во внутренней памяти для сохранения файлов и получить их позже

//Creating an internal directory
File mydir = context.getDir("mydir", Context.MODE_PRIVATE); 
//Getting a file within the dir.
File fileWithinMyDir = new File(mydir, "myfile"); 
FileOutputStream out = new FileOutputStream(fileWithinMyDir); 
//Use the stream as usual to write    into the file
person Annabel    schedule 11.01.2013
comment
Это идеальный ответ @Annabel! Большое Вам спасибо(; - person Becky Reyna; 14.01.2013
comment
Ну и не говори =) - person Annabel; 14.01.2013

Вам нужно добавить это разрешение на использование в свой манифест

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

Используйте это для пути к SD-карте

File sdcard = Environment.getExternalStorageDirectory();
File storagePath = new File(sdcard.getAbsolutePath() + "/folderName");
File userimage = new File(storagePath + "/" + fileName + ".3gpp");
person NaviRamyle    schedule 11.01.2013
comment
Эй, @Ivan Erl Elymar Cayaban, эм... да... приведенный выше код работоспособен... Мне нужно сохранить его в папке с данными... не на SD-карте... - person Becky Reyna; 11.01.2013
comment
Извините, вы пробовали эту ссылку - person NaviRamyle; 11.01.2013
comment
хм.. нормально! спасибо за ссылку и усилия, хотя! Будем разбираться ^^ - person Becky Reyna; 11.01.2013

Рекомендуется хранить файлы в каталоге данных. (т. е. sdcard/Android/data/yourpackage/), чтобы папку можно было удалить автоматически, как только пользователь удалит ваше приложение.

Вы можете использовать приведенный ниже код, чтобы получить папку данных: (если ваш Build.VERSION.SDK_INT меньше, чем Build.VERSION_CODES.FROYO )

Environment.getExternalStorageDirectory() +"/Android/data/" +context.getApplicationContext().getPackageName());

(если ваш Build.VERSION.SDK_INT больше, чем Build.VERSION_CODES.FROYO )

context.getExternalFilesDir(Context.STORAGE_SERVICE)
person Shahul3D    schedule 19.11.2013