2010-10-04 30 views
7

Ho letto l'SDK di Android e ho scoperto che la classe MediaRecorder può ricevere input da una videocamera, audio o altra fonte e comprimerla. Tramite il metodo setOutputFile è possibile specificare dove si desidera archiviare i dati (file o URI), ma cosa succede se si desidera archiviare tali dati in un buffer di memoria e inviarli tramite una connessione? Oppure elaborarlo prima di inviarlo? Voglio dire c'è un modo per non creare un file ma per usare solo un buffer di memoria?Android MediaRecorder e setOutputFile

risposta

1

Puoi ovviamente leggere il file in un secondo momento e fare quello che vuoi con esso nel modo di elaborazione. Supponendo che tu tenga l'Uri al file audio risultante, ecco uno snippet di codice che lo legge in un array di byte e quindi elimina il file.

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); 
    } 
Problemi correlati