Android MediaRecorder и setOutputFile - PullRequest
       37

Android MediaRecorder и setOutputFile

7 голосов
/ 04 октября 2010

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

1 Ответ

1 голос
/ 06 июня 2011

Конечно, вы можете прочитать файл позже и делать с ним все, что захотите, в процессе обработки. Предполагая, что 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);
   }
...