Ich baue gerade eine Soundboard-App als mein erstes kleines Android-App-Projekt. Ich habe eine Menge .mp3-Dateien im Ordner "Assets" meiner App gespeichert und dann dynamisch Schaltflächen basierend auf den dort gespeicherten .mp3-Dateien erstellt. Im Tag jeder Taste speicherte ich den entsprechenden .mp3-Dateinamen.Das Asset kann nicht als Datenquelle im Mediaplayer eingestellt werden
Im onClick()
Ereignis jeder Schaltfläche, ich versuche, die DataSource
eines globalen MediaPlayer
auf die Datei von meinem Vermögen zu setzen. Der FileDescriptor
verarbeitet den openFd-Befehl einwandfrei, aber der MediaPlayer kann die DataSource nicht festlegen.
Die App nur abstürzt, nach diesem Befehl ausgeführt wird. Hier ist die OnClickListener
:
tempButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mediaPlayer.release();
String tag = v.getTag().toString();
try {
AssetFileDescriptor afd = getAssets().openFd(tag + ".mp3");
mediaPlayer.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength());
afd.close();
mediaPlayer.prepare();
mediaPlayer.start();
} catch (IOException e) {
e.printStackTrace();
}
}
});
Die logcat druckt den folgenden Absturz bei der setDataSource() -Methode ausführen:
05-22 16:23:45.191 4505-4505/com.development.alo.dasunterboard E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.development.alo.dasunterboard, PID: 4505
java.lang.IllegalStateException
at android.media.MediaPlayer._setDataSource(Native Method)
at android.media.MediaPlayer.setDataSource(MediaPlayer.java:1133)
at com.development.alo.dasunterboard.MainActivity$2.onClick(MainActivity.java:79)
at android.view.View.performClick(View.java:5198)
at android.view.View$PerformClick.run(View.java:21147)
at android.os.Handler.handleCallback(Handler.java:739)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5417)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
ich einen Blick in die MediaPlayer.java nahm, weil der Absturz dort zu geschehen scheint. Es sieht aus wie der FileDescriptor nicht gültig.
'Die App sehen nur crashes' die Ausnahme Stacktrace für den Grund, warum es abstürzt. –
Mögliches Duplikat von [Leider ist MyApp gestoppt. Wie kann ich dieses Problem lösen?] (Http://stackoverflow.com/questions/23353173/unfortunately-myapp-has-stopped-how-can-i-solve-this) –
Es gewann ' t auch dort bekommen .. Ich habe ein Unterbrechungspunkt zum e.printStackTrace, aber bevor es dort ankommt, wird die App sofort geschlossen. –