2

メディア プレーヤーでオーディオ ファイルを再生しようとしていますが、ファイルが完全に再生されたら、その特定のファイルの特定の位置からループし、ループを繰り返し続けます。

特定のポイントから再生する seekTo() メソッドを見たことがありますが、最初にファイルを完全に再生してから seekTo 関数を使用する方法がわかりません。

どんな助けでも大歓迎です。sudo コードが役に立ちます。

コードの追加:

これが私が試したコードですが、サウンドを再度再生する前に約 1 秒間のギャップが残ります。

public void playBackgroundMusic() {
    AssetFileDescriptor descriptor = null;
    try {
        descriptor = context.getAssets().openFd("music/" + FILE_NAME);
        try {
            this.mediaPlayer.setDataSource(descriptor.getFileDescriptor(),
                    descriptor.getStartOffset(), descriptor.getLength());
        } catch (IllegalStateException e) {
            this.mediaPlayer.reset();
            this.mediaPlayer.setDataSource(descriptor.getFileDescriptor(),
                    descriptor.getStartOffset(), descriptor.getLength());
        }
        if (listener != null) {
            this.mediaPlayer.setOnCompletionListener(listener);
        }
        this.mediaPlayer.setOnErrorListener(new OnErrorListener() {

            @Override
            public boolean onError(MediaPlayer arg0, int arg1, int arg2) {
                // TODO Auto-generated method stub
                return false;
            }
        });
        this.mediaPlayer.setLooping(false);
        this.mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
        this.mediaPlayer.prepare();
        this.mediaPlayer.start();

    } catch (IOException e) {
        e.printStackTrace();
    } finally {
        try {
            if (descriptor != null) {
                descriptor.close();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

private OnCompletionListener listener = new OnCompletionListener() {

    @Override
    public void onCompletion(MediaPlayer mp) {
        // TODO Auto-generated method stub
        mp.seekTo(DEFAULT_LOOPING_TIME);
        mp.start();
    }
};
4

1 に答える 1

0
  • メディアを最初から再生します。
  • onPlaybackFinished イベント、または同様のものを使用してメディアを再度開始します。今回は seekTo() メソッドを使用します。
于 2012-11-27T13:18:40.297 に答える