2010-10-04 3 views
7

J'ai lu le SDK Android et j'ai découvert que la classe MediaRecorder peut prendre en charge une entrée provenant d'une caméra, de l'audio ou d'une autre source et la compresser. Grâce à la méthode setOutputFile, vous pouvez spécifier où vous souhaitez stocker les données (Fichier ou URI), mais que se passe-t-il si je veux stocker ces données dans un tampon mémoire et les envoyer via une connexion? Ou le traiter avant de l'envoyer? Je veux dire est-il un moyen de ne pas créer un fichier mais d'utiliser un tampon de mémoire seulement?Android MediaRecorder et setOutputFile

Répondre

1

Vous pouvez bien sûr lire le fichier plus tard et faire ce que vous voulez avec le traitement. En supposant que vous détenez l'Uri dans le fichier audio résultant, voici un fragment de code qui le lit dans un tableau d'octets, puis supprime le fichier.

String audioUri = u.getPath(); 
InputStream in = new BufferedInputStream(this.getContentResolver().openInputStream(u)); 
byte[] b = new byte[BUFSIZE]; 

BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(new File(mFileName/*mFilePath*/))); 
int byteCnt = 0; 
while (0 <= (byteCnt = in.read(b, 0, BUFSIZE))) 
    out.write(b, 0, byteCnt); 
out.flush(); 
out.close(); 
// try to delete media file 
try { 
    // Delete media file pointed to by Uri 
    new File(getRealPathFromURI(u)).delete(); 
} catch (Exception ex) {} 


    public String getRealPathFromURI(Uri contentUri) { 
     String[] proj = { MediaStore.Images.Media.DATA }; 
     Cursor cursor = managedQuery(contentUri, proj, null, null, null); 
     int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA); 
     cursor.moveToFirst(); 
     return cursor.getString(column_index); 
    }