2010-12-08 6 views
1

2週間前に初めてのAndroidアプリ(Agent Syndicateと呼ばれるMMO)をリリースしました。音と音楽を除いて、すべてうまくいっています!Android MP3 MediaPlayerがいくつかのハンドセットをクラッシュする

ソニーのSound Forge Pro 10で128kpsで作成された標準のMP3ファイルを使用して、多くのユーザーから、Android 2.1と2.2を主に実行する幅広い種類の端末でForce Closeの問題を報告するという報告がすぐに届きました。私はすべての音が消された新しいバージョンをリリースし、苦情はやめた。しかし、私は本当に音がしたいと思うので、これは理想から遠いです。

私の個人的な電話とエミュレータ以外のゲームをテストするためのリソースにアクセスすることはできません(すべてが完璧に動作します)が、多くのプレイヤーにとって大きな問題があることは明らかです!

MP3を使用しないでください。シンプルなサウンドファイルを再生するために、すべてのハンドセットに最適な普遍的な方法はありますか?

これは私が私のサウンドエフェクトを開始するために使用しているものです:

final MediaPlayer player = MediaPlayer.create(GlobalState.Instance, resId); 
player.setOnCompletionListener(new MediaPlayer.OnCompletionListener() 
{ 
    public void onCompletion(MediaPlayer mp) 
    { 
     mp.release(); 
    } 
}); 
player.setVolume(0.5f, 0.5f); 
player.start(); 

私はもともと)(player.start前player.prepare()を呼び出すが、サウンドファイルの一部にIllegalStateExceptionsを得て維持しました。そこにある情報の中には、これらのメソッドを正確に呼び出すタイミングと例外の意味を非常に混乱させるものがあります。 player.prepare()を削除すると、エミュレータと私のローカルのdevデバイスで私の時間の100%を稼働させることができました。

答えて

0

MediaPlayerを音楽に使用しても問題ありませんが、サウンドエフェクトではSoundPoolクラスを代わりに使用します。私の推測では、Playerの準備が完了する前にMediaPlayerを起動しているので、IllegalStateExceptionsを取得していると思います。正しい方法は、MediaPlayerのためのonPreparedListenerを導入し、そこから開始することです。メインUIスレッドでMediaPlayerの操作をしていますか?

+0

SoundPoolは、サウンドに追加するすべてのサウンドをメモリ内で解凍するので、非常に注意してください。超小型サウンド(<1秒)の場合にのみ使用してください。リモートで大きなものをロードするとメモリ例外が発生します。 – ADB