0

なぜこれが起こるのか説明できますか?メディアプレーヤーがエミュレーターでどのように機能するかはわかりますが、実際のデバイスで問題が発生することがあります。エミュレーターにエラーが表示されないため、これを修正できません。

mpを作成するためのコード

            mp = new MediaPlayer();
        mp.setDataSource(myStream);
            mp.prepare(); //also consider mp.prepareAsync().

スタックトレースを使用して検出されたエラー

java.lang.RuntimeException: An error occured while executing doInBackground()
    at android.os.AsyncTask$3.done(AsyncTask.java:200)
    at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273)
    at java.util.concurrent.FutureTask.setException(FutureTask.java:124)
    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307)
    at java.util.concurrent.FutureTask.run(FutureTask.java:137)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1068)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:561)
    at java.lang.Thread.run(Thread.java:1096)
Caused by: java.lang.IllegalStateException
    at android.media.MediaPlayer._start(Native Method)
    at android.media.MediaPlayer.start(MediaPlayer.java:798)
    at myApp.activity.com.myApp.play(myApp.java:320)
    at myApp.activity.com.myApp$PlayOn.doInBackground(myApp.java:454)
    at myApp.activity.com.myApp$PlayOn.doInBackground(myApp.java:1)
    at android.os.AsyncTask$2.call(AsyncTask.java:185)
    at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305)

myApp.java 454に従うと、クラッシュした行

mp.start();

説明するか、助けてください。私はより幸せになります

よろしく、ピーター。

4

1 に答える 1

0

ドキュメントで明確に説明されているように、MediaPlayer準備中または一時停止している場合にのみ、開始を呼び出すことができます。

おそらくタイミングの問題があり、特定の状況でのみバグが発生します。つまり、コードの一部がコードの別の部分の前に実行MediaPlayerされると、間違った状態になり、このクラッシュが発生します。上の状態遷移メソッドMediaPlayerが呼び出されるポイントを検索し、それらが間違った順序で呼び出されている可能性があるかどうかを確認します。

フューチャを使用していると、注意を怠るとメソッドを間違った順序で呼び出すことが容易になります。

于 2012-01-23T10:32:12.657 に答える