私は現在、最初の小さなAndroidアプリプロジェクトとしてサウンドボードアプリを構築しています。 私のアプリのassetsフォルダに.mp3ファイルの束を保存し、そこでそこに格納された.mp3ファイルに基づいてボタンを動的に作成しました。すべてのボタンのタグで、対応する.mp3ファイル名を保存しました。メディアプレイヤーのデータソースとしてアセットを設定できません
すべてのボタンのonClick()
イベントでは、グローバルMediaPlayer
のDataSource
を自分のアセットのファイルに設定しようとしています。 FileDescriptor
はopenFdコマンドを完璧に処理しますが、mediaPlayerはDataSourceを設定できません。
このコマンドを実行すると、アプリがクラッシュするだけです。ここでOnClickListener
です:
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)
クラッシュが発生するようですので、私はMediaPlayer.javaに見ていた:setDataSource()メソッドを実行するときに
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();
}
}
});
logcatは、次のクラッシュを印刷します。 FileDescriptorが無効であるようです。
'The App just crashes'それはクラッシュする理由のために例外スタックトレースを参照してください。 –
[不幸にもMyAppが停止しました。どのように私はこれを解決することができますか?](http://stackoverflow.com/questions/23353173/unfortunately-myapp-has-stopped-how-can-i-solve-this) –
それは'トンも得た..私は設定e.printStackTraceへのブレークポイントですが、そこに到達する前に、即座にアプリケーションが終了します。 –