2012-01-03 15 views
1

私はループしているOggファイルを再生しようとしていますが、setLooping(true)を有効にしようとしましたが、何も効果がなかったので、onCompletionListenerを試しましたが、どちらもうまくいきません。続きandroid MediaPlayer Looping

musicPlayer = MediaPlayer.create(mContext, R.raw.overworld); 
musicPlayer.setVolume(musicVolume, musicVolume); 
// musicPlayer.setLooping(true); 

musicPlayer.setOnCompletionListener(new OnCompletionListener() { 

    @Override 
    public void onCompletion(MediaPlayer mp) { 
     musicPlayer.stop(); 
     musicPlayer.seekTo(0); 
     musicPlayer.start(); 
     Log.d("Sound Manager", "Song Completed"); 
    } 
}); 

public void playSong(int id) { 
    try { 
     stopSong(); 
     musicPlayer = MediaPlayer.create(mContext, id);            
     musicPlayer.start(); 
    } catch(Exception e) { 
     // Ignored 
    } 
} 

答えて

1

MediaPlayerのは、OGGファイルとの問題があることが知られています、私の再生機能です。 別のファイル形式に切り替えることをお勧めします。

もう1つは、setLooping(boolean)を試してみることです。これは、同じスキームを使用している可能性が高く、はるかに明確です。

MediaPlayerオブジェクトが停止している場合、seekTo()を呼び出すとMediaPlayerが無効な状態になります。代わりにpause()に電話することができますが、私はこれらの方法を呼び出すことはありません。あなたがmusicPlayer.stop()を削除すればそれはうまくいくと思います。

+0

SFXではない曲で同じファイルのMP3ファイルは3MBですが、Ogg形式では600KBです – GideonKain

+0

@GideonKain私の質問を編集しました:) – poitroae

+0

Log.dは決して表示されませんLogCat、リスナーは発砲していない? – GideonKain

0
remove .... 
    musicPlayer.stop(); 
from 
    onCompletion(MediaPlayer mp) 
0

あなたMediaPlayerがループに設定されていますが、それがループに設定されていない場合、あなたは常にだけでも、とても

@Override 
public void onCompletion(MediaPlayer mp) { 
    if(!mp.isPlaying()) { 
     mp.start(); 
    } 
    mp.seekTo(0); 
} 

のようにあなたを完了リスナーを使用できるかどうonCompletionListener()が呼び出されませんstop()には再生を完全に停止するので、再生していないビデオ/曲を探すのは意味がないため、stop()に電話をかけてはいけません。