私はアンドロイドのメディアプレーヤーで苦労しています。基本的に私はダウンロード中のSDカードから曲を再生しようとします(ある種のストリーミング)。したがって、曲がダウンロードされた後(20%)、曲の再生が開始されます。このままにしておくと、最後まで正常に機能します。しかし、最後(20%以上)でシークしようとすると、シーク位置がEOFファイル上にあるため、明らかに機能しません。そのため、このコードをメソッド内に作成しました。
MediaPlayer mp = new MediaPlayer();
mp.setDataSource(sFilePath);
mp.prepare();
int offset = (progress * mp.getDuration()) / 100;
if (sCompleted) return;
sLastSeek = offset;
if (offset > sMediaPlayer.getDuration()) {
sMediaPlayer.reset();
sMediaPlayer.setDataSource(sFilePath);
sMediaPlayer.prepare();
} else {
sMediaPlayer.seekTo(offset);
}
sMediaPlayer
私のmediaPlayerはどこにありsFilePath
、ファイルパスはです。理論的には、私が提示したケースをカバーする必要がありますが、ファイルの長さを超えると、プレーヤーはリセットされますが(コードが示すように)、再生されません。これは非常に厄介で、私の力を超えています。