3

私はアンドロイドのメディアプレーヤーで苦労しています。基本的に私はダウンロード中の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、ファイルパスはです。理論的には、私が提示したケースをカバーする必要がありますが、ファイルの長さを超えると、プレーヤーはリセットされますが(コードが示すように)、再生されません。これは非常に厄介で、私の力を超えています。

4

1 に答える 1

0

曲の最後に到達したため、mediaPlayer が停止した可能性があります。もう一度開始するか、一定の間隔でファイルを更新するか (5 秒ごとなど)、単に onCompletionListener を使用します。最後のケースでは、ファイルが終了すると、ファイルをリロードして再生を続けることができます... mp.getCurrentPosition() を使用して、再生を中断した場所を取得します。

また、sMediaPlayer を参照していることに気付きましたが、MediaPlayer は mp として定義されています。

于 2012-11-29T12:23:13.067 に答える