1. ホーム
  2. android

[解決済み] Android: Mediaplayerが未処理のイベントで消えてしまった。

2022-02-16 10:10:25

質問

アプリから再生する必要がある一連の音声アナウンスについて、音声ファイルの再生時間を取得する必要があります。 音声ファイルをリソースとして追加したところ、正常に再生されました。 以下のサンプルコードは、意図した目的に対して完璧に動作します:オーディオファイルの継続時間を返します。

以下はそのコードです。

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;
}

ここが変なところです。 このコードは、与えられたテスト用の音声指示のセットを準備するMainアクティビティで呼び出されています。 このアクティビティ内ではエラーは発生しません。しかし、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>

Mainアクティビティの最後まで(エラーなし)、Secondアクティビティの1行目からシングルステップしています。 エラーは間違いなくアクティビティーの間で投げられます。
また、tryブロックの8行をコメントアウトすると(つまりゼロだけを返す)、logcatエラーは回避されます。 8行を元に戻すと、またエラーが発生します。 ドキュメントを読み、ウェブを検索し、Mediaplayerオブジェクトを正しく構築、解放、破壊しているつもりです。 とはいえ、私は何か間違ったことをしているに違いありません。 何かアイデアはありますか?

ありがとうございます。

ケビン

解決方法は?

ただ mp.reset(); の前に mp.release(); .