2010-10-04 4 views
7

Я читал Android SDK, и я обнаружил, что класс MediaRecorder может принимать данные от камеры, аудио или другого источника и сжимать его. С помощью метода setOutputFile вы можете указать, где вы хотите хранить данные (файл или URI), но что, если я хочу сохранить эти данные в буфере памяти и отправить их по соединению? Или обрабатывать его перед отправкой? Я имею в виду, есть ли способ создать файл, но использовать буфер памяти?Android MediaRecorder и setOutputFile

ответ

1

Вы можете, конечно, прочитать файл позже и делать все, что хотите, в процессе обработки. Предполагая, что u удерживает Uri в результирующем аудио файле, вот фрагмент кода, который считывает его в массив байтов, а затем удаляет файл.

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