AndroidのVideoViewでは、再生しようとしている動画のHTTPステータスコードが403や404、また、フォーマットがSupported Media Formatsに含まれない場合、「この動画は再生できません」ダイアログが表示され、OKを押すと空のVideoViewが表示される。
できれば、OKボタンを押した時には、呼び出し元のActivityに遷移させたかったのでメモ。
Android Developersによると、エラー発生時にはOnErrorListenerが呼ばれる。onErrorがfalseを返すか、OnErrorListenerが呼ばれない場合はOnCompletionListenerが呼ばれる。
つまり、OnCompletionListenerは、正常に動画の再生が終了した際にも呼ばれるので、currentPositionがdurationと同じ場合は画面の遷移をさせないようにすればよかった。
VideoActivity.java
videoView.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
public void onCompletion(MediaPlayer mp) {
if (mp.getCurrentPosition() != mp.getDuration()) {
finish();
}
}
});
ちなみに、onErrorでハンドリングできないかと思いこんな感じのコードを書いたが、ダイアログが表示される前に前画面に遷移してしまった。
VideoActivityFalse.java
videoView.setOnErrorListener(new MediaPlayer.OnErrorListener() {
public boolean onError(MediaPlayer mp, int what, int extra) {
finish();
return false;
}
});