7

Android SDK を読んだところ、MediaRecorder クラスがカメラ、オーディオ、またはその他のソースから入力を取得して圧縮できることがわかりました。setOutputFile メソッドを使用して、データを保存する場所 (ファイルまたは URI) を指定できますが、そのデータをメモリ バッファーに保存して接続経由で送信したい場合はどうすればよいでしょうか? それとも送信前に処理しますか?ファイルを作成せずにメモリバッファのみを使用する方法はありますか?

4

1 に答える 1

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);
   }
于 2011-06-06T02:42:50.157 に答える