2010-10-04 17 views
7

Android SDK'yı okudum ve MediaRecorder sınıfının bir Kamera, Ses veya başka bir kaynaktan girdi alıp sıkıştırdığını buldum. SetOutputFile yöntemiyle verilerin saklanmasını istediğiniz yeri belirtebilirsiniz (Dosya veya URI), ancak bu verileri bir bellek arabelleğinde saklamak ve bir bağlantı üzerinden göndermek istersek ne olur? Ya da göndermeden önce işlemek? Demek istediğim, bir dosya oluşturmanın değil, sadece bir bellek arabelleğini kullanmanın bir yolu var mı?Android MediaRecorder ve setOutputFile

cevap

1

Tabii ki dosyayı daha sonra okuyabilir ve işleyiş biçiminde istediğiniz gibi yapabilirsiniz. Uri'yi elde edilen ses dosyasına tuttuğunuz varsa, burada bir bayt dizisine okuyan ve daha sonra dosyayı silen bir kod pasajıdır.

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