7
我讀過Android SDK,我發現MediaRecorder類可以從攝像頭,音頻或其他來源獲取輸入並對其進行壓縮。通過setOutputFile方法,您可以指定要存儲數據的位置(文件或URI),但如果要將數據存儲在內存緩衝區中並通過連接發送,該怎麼辦?或者在發送之前處理它?我的意思是有沒有辦法創建一個文件,但只使用內存緩衝區?Android MediaRecorder和setOutputFile
我讀過Android SDK,我發現MediaRecorder類可以從攝像頭,音頻或其他來源獲取輸入並對其進行壓縮。通過setOutputFile方法,您可以指定要存儲數據的位置(文件或URI),但如果要將數據存儲在內存緩衝區中並通過連接發送,該怎麼辦?或者在發送之前處理它?我的意思是有沒有辦法創建一個文件,但只使用內存緩衝區?Android MediaRecorder和setOutputFile
你當然可以在後面讀取文件,並以處理方式做任何你想做的事情。假設你將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);
}