VideoView を含むアプリケーションがあり、VideoView で再生するようにビデオを設定します。ビデオの再生中のある時点で一時停止します。次に、しばらく一時停止した後、ビデオの再生を再開しますが、一時停止していなかった場合のビデオの位置までシークします。たとえば
ビデオの再生が始まります
ビデオは 6 秒で一時停止しました
ビデオは 10 秒間一時停止されたままになります
ビデオの再生が再開します <--- この時点で、ビデオの再生を 16 秒のマークで開始します。
この効果を実現するために、必要な計算を行うためにタイムスタンプを設定しました。これにより、ビデオが一時停止されていた時間がわかります。その後、ビデオを再開するときに呼び出しますmVideoView.seekTo(timePlayed + timePaused);
これはすべて、Toshiba Thrive と Motorola Xoom で意図したとおりに機能します。ただし、Acer Iconia A200 では、seekTo() を前方に呼び出した時点から、VideoView を呼び出したときに常に同じ時間を返すようgetCurrentPosition()
です。これを説明するために、現在の位置をログに記録する約 1000 ミリ秒ごとに起動するランナブルをセットアップしました。その出力の一部を次に示します。
/****************
* These are from before it is paused/resumed
* you can see that the current time is functioning
* as expected.
******************/
Current Position = 0
Current Position = 734
Current Position = 1735
Current Position = 2703
Current Position = 3737
Current Position = 4738
Current Position = 5739
Current Position = 6740
Current Position = 7741
Current Position = 8742
Current Position = 9743
/**********************************
* These are from the exact same runnable
* after the video has been paused, and
* started again after seekTo().
* The position is no longer increasing.
* Note that the video is playing correctly on the screen
* while these logs happen.
**********************************/
Current Position = 23410
Current Position = 23410
Current Position = 23410
Current Position = 23410
23410 は seekTo() に渡す正確な時間であるため、この呼び出しを行った後、VideoView は、実際にまだ再生中で位置が進んでいるかどうかに関係なく、渡したものを常に返すようです。
以前にこの VideoView/MediaPlayer のバグを経験した人はいますか? 既知の問題グループで、MediaPlayer が getCurrentPosition() に対して誤った値を返すことについて話していることをいくつか見ましたが、このように増加が止まる場所は見つかりませんでした。私が見たもののほとんどは、ビデオではなくオーディオを再生しようとしていました.