Nabend,
als Frischling habe ich direkt eine Frage an euch. Sicherlich kann mir hier jemand ganz schnell helfen. Für mich ist JAVA und insbesondere die Android-SDK völliges Neuland. Programmiererfahrungen bringe ich jedoch ein wenig mit (PHP und ein paar (10 Jahre zurückliegende) Grundkenntnisse zu Visual Basic) und mir war irgendwie danach etwas neues zu lernen. Ein wirkliches Ziel habe ich nicht vor Augen und daher experimentiere ich nur ein wenig herum, füge eine Funktion an die nächste und habe letztes Endes irgendwann ein Schweizer Taschenmesser für Android, welches überladen ist und keiner haben möchte. ;-)
Genug Geschwafel, zurück zu meinem eigentlichen Problem: Momentan spiele ich mit dem MediaRecorder ein wenig herum. Ohne mich bisher großartig mit den Einstellungen beschäftigt zu haben, lässt sich bereits eine Aufnahme starten und stoppen. Rufe ich jedoch ein zweites Mal die Start-Anweisung auf (Start => Stopp => Start), stürzt die App auf meinem Desire HD ab. Was mache ich falsch?
Hier der Code (habe nur das wesentliche herauskopiert, sonst wird’s zu lang):
Mit folgendem Fehler stürzt das ganze ab (ebenfalls gekürzt):
EDIT: Der Fehler liegt am "SoundRec.release();", wo baue ich das alternativ am besten ein?
als Frischling habe ich direkt eine Frage an euch. Sicherlich kann mir hier jemand ganz schnell helfen. Für mich ist JAVA und insbesondere die Android-SDK völliges Neuland. Programmiererfahrungen bringe ich jedoch ein wenig mit (PHP und ein paar (10 Jahre zurückliegende) Grundkenntnisse zu Visual Basic) und mir war irgendwie danach etwas neues zu lernen. Ein wirkliches Ziel habe ich nicht vor Augen und daher experimentiere ich nur ein wenig herum, füge eine Funktion an die nächste und habe letztes Endes irgendwann ein Schweizer Taschenmesser für Android, welches überladen ist und keiner haben möchte. ;-)
Genug Geschwafel, zurück zu meinem eigentlichen Problem: Momentan spiele ich mit dem MediaRecorder ein wenig herum. Ohne mich bisher großartig mit den Einstellungen beschäftigt zu haben, lässt sich bereits eine Aufnahme starten und stoppen. Rufe ich jedoch ein zweites Mal die Start-Anweisung auf (Start => Stopp => Start), stürzt die App auf meinem Desire HD ab. Was mache ich falsch?
Hier der Code (habe nur das wesentliche herauskopiert, sonst wird’s zu lang):
Java:
private static final String APP_TAG = "de.mh.justtesting";
private MediaRecorder SoundRec = new MediaRecorder();
private File SoundRec_Outfile = null;
private void cmdSoundRec_Start() {
try {
// Output-Filename
File SoundRec_storageDir = new File(Environment.getExternalStorageDirectory(), "DRC/");
SoundRec_storageDir.mkdir();
Log.d(APP_TAG, "Storage directory set to " + SoundRec_storageDir);
SoundRec_Outfile = File.createTempFile("DRC", ".3gp", SoundRec_storageDir);
Log.d(APP_TAG, "Storage file set to " + SoundRec_Outfile);
// init recorder
SoundRec.setAudioSource(MediaRecorder.AudioSource.MIC);
SoundRec.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
SoundRec.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
SoundRec.setOutputFile(SoundRec_Outfile.getAbsolutePath());
}
catch (IOException e) {
Log.w(APP_TAG, "File not accessible ", e);
} catch (IllegalArgumentException e) {
Log.w(APP_TAG, "Illegal argument ", e);
} catch (IllegalStateException e) {
Log.w(APP_TAG, "Illegal state, call reset/restore", e);
}
Log.d(APP_TAG, "start recording..");
try {
SoundRec.prepare();
SoundRec.start();
} catch (IllegalStateException e) {
Log.w(APP_TAG, "Invalid recorder state .. reset/release should have been called");
} catch (IOException e) {
Log.w(APP_TAG, "Could not write to sd card");
}
}
private void cmdSoundRec_Stop() {
Log.d(APP_TAG, "stop recording...");
SoundRec.stop();
SoundRec.reset();
SoundRec.release();
}
Mit folgendem Fehler stürzt das ganze ab (ebenfalls gekürzt):
Code:
01-15 20:50:35.784: D/View(8861): onTouchEvent: viewFlags: 0x18004001
01-15 20:50:35.784: D/View(8861): onTouchEvent: isFocusable: true, isFocusableInTouchMode: false, isFocused: false; focusTaken: false
01-15 20:50:35.784: D/de.mh.justtesting(8861): Storage directory set to /mnt/sdcard/DRC
01-15 20:50:35.784: D/de.mh.justtesting(8861): Storage file set to /mnt/sdcard/DRC/DRC-400199155.3gp
01-15 20:50:35.784: V/MediaRecorderJNI(8861): setAudioSource(1)
01-15 20:50:35.784: V/MediaRecorderJNI(8861): getMediaRecorder E
01-15 20:50:35.894: I/DEBUG(1252): debuggerd: 2012-01-15 20:50:35
01-15 20:50:35.894: I/DEBUG(1252): *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
01-15 20:50:35.894: I/DEBUG(1252): Build fingerprint: 'htc_wwe/htc_ace/ace:2.3.5/GRJ90/$:user/release-keys'
01-15 20:50:35.894: I/DEBUG(1252): pid: 8861, tid: 8861 >>> de.mh.justtesting <<<
01-15 20:50:35.894: I/DEBUG(1252): signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 00000010
01-15 20:50:35.894: I/DEBUG(1252): r0 00000000 r1 00000001 r2 00000000 r3 00000001
…
01-15 20:50:35.965: I/DEBUG(1252): bef4e340 42154d94
01-15 20:50:35.965: I/DEBUG(1252): bef4e344 80018178 /system/lib/libdvm.so
01-15 20:50:36.165: I/ActivityManager(1357): Process de.mh.justtesting (pid 8861) has died.
01-15 20:50:36.165: I/WindowManager(1357): WIN DEATH: Window{407c8530 de.mh.justtesting/de.mh.justtesting.DRC_StartActivity paused=false}
EDIT: Der Fehler liegt am "SoundRec.release();", wo baue ich das alternativ am besten ein?
Zuletzt bearbeitet: