MediaPlayer Klasse: Aufruf von prepare() bringt App zum Absturz

  • Antworten:1
Thomas Könning
  • Forum-Beiträge: 16

11.05.2011, 19:42:04 via Website

Hallo,

habe eine einfache App geschrieben, die einen Sound abspielt, eine bestimmte Zeit wartet und anschließend den Sound nochmal abspielt.
Diese Teste ich im Emulator.

Hier der Code, der funktioniert (als Auszug):

1public class Test extends Activity {
2 private MediaPlayer mp;
3
4
5
6 mp = MediaPlayer.create(this, R.raw.bell);
7 mp.start();
8}

Also einmal den Sound abspielen, funktioniert.

Wenn ich aber jetzt den Sound 3 mal abspielen will, muss ich ja mit reset() und prepare() arbeiten.
leider führt ein Aufruf von prepare() zum Absturz der App:

1public class Test extends Activity {
2 private MediaPlayer mp;
3
4
5
6 mp = MediaPlayer.create(this, R.raw.bell);
7
8 for (int i = 0; i < 3; i++) {
9 mp.start();
10 mp.reset();
11 try {
12 mp.prepare();
13 }
14 catch (IOException e) {
15 e.getStackTrace();
16 }
17 }
18}

Wie gesagt, mit dem prepare() Aufruf stürzt die App ab.
Und zwar direct, ohne dass die View aufgebaut wird.

Hier die Log Ausgabe:

1!ENTRY com.android.ide.eclipse.adt 4 0 2011-05-11 19:38:37.753
2!MESSAGE No command output when running: 'am start -n de.aikitux.test/de.aikitux.test.Test -a android.intent.action.MAIN -c android.intent.category.LAUNCHER' on device emulator-5554
3!STACK 0
4com.android.ddmlib.ShellCommandUnresponsiveException
5 at com.android.ddmlib.AdbHelper.executeRemoteCommand(AdbHelper.java:408)
6 at com.android.ddmlib.Device.executeShellCommand(Device.java:276)
7 at com.android.ide.eclipse.adt.internal.launch.ActivityLaunchAction.doLaunchAction(ActivityLaunchAction.java:74)
8 at com.android.ide.eclipse.adt.internal.launch.AndroidLaunchController.launchApp(AndroidLaunchController.java:1146)
9 at com.android.ide.eclipse.adt.internal.launch.AndroidLaunchController.clientChanged(AndroidLaunchController.java:1489)
10 at com.android.ddmlib.AndroidDebugBridge.clientChanged(AndroidDebugBridge.java:868)
11 at com.android.ddmlib.Device.update(Device.java:398)
12 at com.android.ddmlib.Client.update(Client.java:835)
13 at com.android.ddmlib.HandleAppName.handleAPNM(HandleAppName.java:90)
14 at com.android.ddmlib.HandleAppName.handleChunk(HandleAppName.java:64)
15 at com.android.ddmlib.MonitorThread.callHandler(MonitorThread.java:414)
16 at com.android.ddmlib.MonitorThread.processClientActivity(MonitorThread.java:322)
17 at com.android.ddmlib.MonitorThread.run(MonitorThread.java:263)

Hat jemand eine Idee, wieso prepare() abstürzt?

Danke im Voraus.

Gruß
Thomas

Antworten
Thomas Könning
  • Forum-Beiträge: 16

12.05.2011, 18:11:21 via Website

Da es mit dem Mediaplayer keine befriedigende Lösung zu geben scheint, habe ich versucht, den Sound über ein SoundPool Objekt abzuspielen.

Leider kommt dabei gar kein Ton.

Hier der Auszug des Codes:

1public class Test extends Activity {
2 /** Called when the activity is first created. */
3 private SoundPool sp;
4 private int sound_id;
5
6 sp = new SoundPool(1, AudioManager.STREAM_MUSIC, 0);
7 sound_id = sp.load(this, R.raw.bell, 1);
8 sp.play(sound_id, 0.5f, 0.5f, 0, 0, 1.0f);
9
10}

Wenn ich die Beschreibung richtig verstehe, sollte er die Datei bell.mp3 so genau ein mal mit halber Lautstärke abspielen, macht er aber nicht.

kann mir jemand sagen, was ich falsch mache?

Antworten