2012-06-25 7 views
17

videoViewが使用しているmediaPlayerインスタンスへの参照を取得できますか?もしそうなら、どうですか?AndroidのvideoViewのmediaPlayerを取得

videoViewにはmediaPlayerほどのリスナーがないので、mediaPlayerにアクセスして特別な制御とイベント処理を改善したいと考えています。

+0

おそらく[反映](http://tutorials.jenkov.com/java-reflection/private-fields-and-methods.html)で行うことができます。 – yorkw

+0

反射があまりにも乱雑で危険です。 videoViewを拡張して代わりにmediaPlayerを取得することは可能ですか? –

答えて

12

あなたはVideoViewからリスナーを送ることができます。

VideoView mVideoView=new VideoView(); 
mVideoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { 
    @Override 
    public void onPrepared(MediaPlayer pMp) { 
    //use a global variable to get the object 
    } 
}); 

代わりにあなただけのメディアプレーヤーのイベントに興味を持っている場合は、これらのいずれかを使用することができ、これらはVideoViewに実装されており、これらは基本的にMediaPlayerのイベントです。

void setOnCompletionListener(MediaPlayer.OnCompletionListener l) 
void setOnErrorListener(MediaPlayer.OnErrorListener l) 
void setOnInfoListener(MediaPlayer.OnInfoListener l) 
void setOnPreparedListener(MediaPlayer.OnPreparedListener l) 

これらの機能はすべて、Media Playerインスタンスにも与えられます。

+0

私はこの質問をずっと前に尋ねてきましたが、私が望んでいたことを思い出しました。この状態では、再生ステータスイベント(一時停止、開始、停止、シーク)、エラーイベント、バッファリングステータスなど... mediaPlayerにはそれらのすべてがありますが(どれくらいうまく動作しているかはわかりませんが)、videoViewにはいくつかしかありません。 –

+0

VideoViewのイベント(例:setOnInfoListener(MediaPlayer.OnInfoListener l))はAPIレベル17からのみ使用できます。したがって、APIレベルを下げるためにサポートしたい場合はどうすればよいですか? –

+0

見つかったMediaPlayerオブジェクトのOnInfoListenerを設定できます。 Available> API 3. –

関連する問題