2010-10-04 18 views
7

He leído el SDK de Android y he encontrado que la clase MediaRecorder puede tomar entrada desde una cámara, audio u otra fuente y comprimirla. A través del método setOutputFile puede especificar dónde desea que se almacenen los datos (Archivo o URI), pero ¿qué sucede si deseo almacenar esos datos en un búfer de memoria y enviarlos a través de una conexión? ¿O procesarlo antes de enviarlo? Quiero decir, ¿hay alguna manera de no crear un archivo, sino de usar solo un búfer de memoria?Android MediaRecorder y setOutputFile

Respuesta

1

Por supuesto, puede leer el archivo más adelante y hacer lo que quiera con él en el proceso. Suponiendo que tengas el Uri en el archivo de audio resultante, aquí hay un fragmento de código que lo lee en una matriz de bytes y luego elimina el archivo.

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); 
    } 
Cuestiones relacionadas