2

MediaPlayerオブジェクトが初期化されているかどうかをどのように確認しますか?次のようなものはありますか?

MediaPlayer mp;
if(mp.isInitialized())
    Log.v("Test", "mp has been initialized. :D ");
else
    Log.v("Test", "mp is NOT yet initialized. :( ");

もちろん、APIドキュメントを確認しましたが、そのような方法はありませんが、同様のアプローチはありますか?

私は自分のコードExceptionを調べて、トリガーされた場合にスローされたものをキャッチすることを検討していますが、それは不適切だと思います。:P

編集:

私のコードは次のように処理することを目的としていました。

MediaPlayer mp;

// Lorem ipsum dolor sit amet consectetur adipisicing...

if(mp.isInitialized)
{
    mp.stop();
}
4

3 に答える 3

5

メソッドが例外をスローすることを宣言する場合、そのメソッドを使用する場合、2つのオプションがあります。throwsキーワードまたは例外を使用して、例外(いわばバックス・トップ)もスローするようにメソッドを宣言しますcatch。あなたはそれらのことの1つをしなければなりません。

ドキュメントにメソッドが含まれているisInitialized()場合でも、メソッドがIllegalStateExceptionsをスローしている場合は、これら2つのメソッドのいずれかで処理する必要があります。

また、キャッチエレガントであり、アプリがクラッシュしないようにし(クラッシュはエレガントではありません)、何かが間違っていることを知らせます。メディアプレーヤーの呼び出しが多い場合(同じ方法で次々と呼び出すなど)、すべてを1つのtry/catchブロックにまとめることができます。

于 2013-01-17T02:44:57.927 に答える
2

mediaPlayerメソッドの呼び出しを試してキャッチし、IllegalStateExceptionがスローされた場合、初期化されません。

try {
   mediaPlayer.isPlaying();
} catch(IllegalStateException e) {
   // media player is not initialized
}
于 2018-02-07T00:04:24.433 に答える
0

2つの考えられるアイデア:

  1. isPlaying()あなたの「意図された」コードによると、なぜあなたは希望の代わりにメソッドを使用できないのですisInitialized()か?mp.stop()実際に何かを演奏している場合にのみ電話をかけたくないですか?

  2. mp.stop()などをOnPreparedListener内に配置するのはどうですか?

于 2013-01-17T02:32:50.397 に答える