2012-01-28 2 views
2

J'essaie d'enregistrer les fichiers audio enregistrés dans un dossier que je voulais plutôt que le dossier par défaut. mais en quelque sorte je n'ai pas réussi à le faire.comment enregistrer les fichiers audio enregistrés dans un autre dossier par programme?

mon code:

Intent recordIntent = new Intent(MediaStore.Audio.Media.RECORD_SOUND_ACTION); 
Uri mUri = Uri.fromFile(new File(Environment.getExternalStorageDirectory(), "/Record/sound_"+ String.valueOf(System.currentTimeMillis()) + ".amr")); 
recordIntent.putExtra(android.provider.MediaStore.EXTRA_OUTPUT, mUri); 
startActivityForResult(recordIntent, RESULT_OK); 

il a fait appel de l'application de l'enregistreur vocal. et aussi quand j'appuie sur le bouton d'arrêt, il revient à mon application et un toast est apparu disant qu'il est enregistré. mais, plutôt que d'enregistrer dans mon dossier Record, il enregistre dans le dossier par défaut.

j'ai réalisé qu'il ya msg d'erreur dans le logcat:

01-29 01:34:23.900: E/ActivityThread(10824): Activity com.sec.android.app.voicerecorder.VoiceRecorderMainActivity has leaked ServiceConnection [email protected]e7c8 that was originally bound here 

Je ne sais pas ce qui a mal tourné que le code fonctionne quand j'appelle l'application appareil photo.

Répondre

0

i J'ai trouvé un moyen de résoudre ce problème, même si cela prend un tour de le faire plutôt que d'aller droit au but, mais c'est le meilleur que j'ai et ça marche aussi.

au lieu d'appeler l'application de l'enregistreur vocal avec supplément inclus, je viens d'appeler sans entrée:

Intent recordIntent = new Intent(MediaStore.Audio.Media.RECORD_SOUND_ACTION); 
startActivityForResult(recordIntent, 1111); 

puis, ajoutez une onActivityResult, avec le code de requête == 1111 (en fonction de ce que vous mettez) et récupérer le dernier fichier modifié qui se composent de l'extension « 3ga » du dossier par défaut de l'enregistreur « Sons »

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) 
{ 
    super.onActivityResult(requestCode, resultCode, data); 

    if(requestCode == 1111) 
    { 
     File folder = new File(Environment.getExternalStorageDirectory(), "/Sounds"); 
     long folderModi = folder.lastModified(); 

    FilenameFilter filter = new FilenameFilter() 
    { 
     public boolean accept(File dir, String name) 
     { 
      return (name.endsWith(3ga)); 
     } 
    }; 

    File[] folderList = folder.listFiles(filter); 

    String recentName = ""; 

    for(int i=0; i<folderList.length;i++) 
    { 
     long fileModi = folderList[i].lastModified(); 

     if(folderModi == fileModi) 
     { 
      recentName = folderList[i].getName(); 
     } 
    } 
} 

cette façon, je peux obtenir le nom du fichier et faire aussi la modification (par exemple changement de nom) avec ça.

espérons que cela aide les autres. =)

9

Do de cette façon, Record avec MediaRecorder:

Pour commencer l'enregistrement:

public void startRecording() 
     { 


       MediaRecorder recorder = new MediaRecorder(); 

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

       recorder.setOnErrorListener(errorListener); 
       recorder.setOnInfoListener(infoListener); 

       try 
       { 
         recorder.prepare(); 
         recorder.start(); 
       } 
       catch (IllegalStateException e) 
       { 
         e.printStackTrace(); 
       } catch (IOException e) 
       { 
         e.printStackTrace(); 
       } 
     } 

Arrêt:

private void stopRecording() 
    { 


      if(null != recorder) 
      {  
        recorder.stop(); 
        recorder.reset(); 
        recorder.release(); 
        recorder = null; 
      } 

Pour le dossier sélectionné:

private String getFilename() 
     { 
       String filepath = Environment.getExternalStorageDirectory().getPath(); 
       File file = new File(filepath,AUDIO_RECORDER_FOLDER); 

       if(!file.exists()){ 
         file.mkdirs(); 
       } 

       return (file.getAbsolutePath() + "/" + System.currentTimeMillis() + ".mp3"); 
     } 
+0

... euh merci, mais je préfère appeler l'application par défaut car il a tous les i IUG et la méthode nécessaire. =) – Jovi

+0

Venez et publiez votre exigence ici http://chat.stackoverflow.com/rooms/5098/android-people – Abhi

+0

il suffit d'ajouter '' –

0

Je l'ai utilisé de cette façon avant et c'est OK pour moi!

private MediaRecorder mRecorder = null; 
    public void startRecording() { 
     if (mRecorder == null) { 
      mRecorder = new MediaRecorder(); 
      mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC); 
      mRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP); 
      mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); 
      mRecorder.setOutputFile(getFilename()); 
      try { 
       mRecorder.prepare(); 
      } catch (IOException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
      mRecorder.start(); 
     } 
    } 

à Arrêter l'enregistrement:

 public void stopRecording() { 

     if (mRecorder != null) { 
      mRecorder.stop(); 
      timer.cancel(); 
      mRecorder.release(); 
      mRecorder = null; 
    } 
    } 

enregistrer le fichier:

 @SuppressLint("SdCardPath") 
    private String getFilename() { 
     file = new File("/sdcard", "MyFile"); 

     if (!file.exists()) { 
      file.mkdirs(); 
     } 

     return (file.getAbsolutePath() + "/" + System.currentTimeMillis() + ".mp3"); 
    } 

if you want to delete folder after recording use this in function of stopping: 

    boolean deleted = file.delete(); 

I hope it can be helpful. 
+0

il ça ne marche pas pour moi –

Questions connexes