Ich habe das Android SDK gelesen und ich habe festgestellt, dass die MediaRecorder-Klasse kann die Eingabe von einer Kamera, Audio oder einer anderen Quelle nehmen und komprimieren. Mit der setOutputFile-Methode können Sie angeben, wo die Daten gespeichert werden sollen (Datei oder URI), aber was ist, wenn ich diese Daten in einem Speicherpuffer speichern und über eine Verbindung senden möchte? Oder verarbeiten Sie es vor dem Senden? Ich meine, gibt es eine Möglichkeit, keine Datei zu erstellen, sondern nur einen Speicherpuffer zu verwenden?Android MediaRecorder und setOutputFile
7
A
Antwort
1
Sie können natürlich später die Datei einlesen und machen was Sie wollen damit in der Art der Verarbeitung. Angenommen, Sie halten den Uri an der resultierenden Audiodatei fest, ist hier ein Code-Snippet, das es in ein Byte-Array liest und dann die Datei löscht.
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);
}