2012-03-07 19 views
45

アプリケーションから再生する必要がある一連の音声アナウンスのオーディオファイルの長さを取得する必要があります。私はリソースとしてオーディオファイルを追加し、彼らはうまく動作します。以下のサンプルコードは実際には意図した目的に完全に機能します:オーディオファイルの再生時間を返します。ここでAndroid:mediaplayerは処理されないイベントで去りました

はコードです:

float getDurationOfAudioResource(LocationEnum loc, Context context){ 
    float duration = 0; 
    try { 
     MediaPlayer mp; 
     mp = MediaPlayer.create(context, getAudioResource(loc)); 
     duration = mp.getDuration(); 
     mp.release(); 
     mp = null; 
    } 
    catch (IllegalStateException e) {e.printStackTrace(); logError(25, "TestDescItem:Fault::Could not open mediaplayer object with audio resource.");} 
    return duration; 
} 

ここで奇妙なことです。このコードは、特定のテストのオーディオ命令セットを準備するメインアクティビティで呼び出されます。このアクティビティにはエラーはありません。しかし、Secondアクティビティが呼び出されるとすぐに、私はlogcatで長いエラー文字列を取得します。

03-07 13:23:43.820: I/ActionLogger(21435): GenTest_Info_Test #0 successfully created. 
03-07 13:23:43.830: I/ActionLogger(21435): GenTest_Info_Test #1 successfully created. 
03-07 13:23:43.840: I/ActionLogger(21435): GenTest_Info_Test #2 successfully created. 
03-07 13:23:43.850: I/ActionLogger(21435): GenTest_Info_Test #3 successfully created. 
<snip> 
03-07 13:23:43.910: I/ActionLogger(21435): GenTest_Info_all tests successfully created. 
03-07 13:23:47.260: W/MediaPlayer(21435): mediaplayer went away with unhandled events 
03-07 13:23:47.260: W/MediaPlayer(21435): mediaplayer went away with unhandled events 
03-07 13:23:47.260: W/MediaPlayer(21435): mediaplayer went away with unhandled events 
03-07 13:23:47.260: W/MediaPlayer(21435): mediaplayer went away with unhandled events 
03-07 13:23:47.260: W/MediaPlayer(21435): mediaplayer went away with unhandled events 
03-07 13:23:47.260: W/MediaPlayer(21435): mediaplayer went away with unhandled events 
03-07 13:23:47.260: W/MediaPlayer(21435): mediaplayer went away with unhandled events 
03-07 13:23:47.260: W/MediaPlayer(21435): mediaplayer went away with unhandled events 
03-07 13:23:47.270: W/MediaPlayer(21435): mediaplayer went away with unhandled events 
<snip> 

メインアクティビティ(エラーなし)の終了まで、および第2アクティビティの最初の行から1ステップアップしました。エラーは間違いなくアクティビティの間にスローされます。
また、tryブロックの8行をコメントアウトすると(したがってゼロだけを返す)、logcatエラーは回避されます。私が8行を復元すると、エラーが戻ってきます。 私はドキュメントを掘り下げてウェブを検索しました。メディアプレーヤオブジェクトを正しく構築、解放、破棄していると思います。なぜエラーが表示されるのかわかりません。つまり、私は間違ったことをしているに違いない。何か案は?

おかげで、

ケビン

答えて

160

ちょうどmp.release();mp.reset();を置きます。

+0

素晴らしいです。それはそれを修正!ありがとうございました! – Hephaestus

+9

それは何をしますか? – Casebash

+4

リリースにより、私のビデオビューがその後にIllegalStateExceptionでクラッシュする... – Ron

34

聖なる5:

if(mp!=null) { 
     if(mp.isPlaying()) 
      mp.stop(); 
     mp.reset(); 
     mp.release(); 
     mp=null; 
    } 
+2

チャームのように働いた – locrizak

+0

VideoViewを使っている人は、これは 'stopPlayback();' – vvolkgang

関連する問題