在下面的类中触发了 .ogg 文件的播放。
public class HomeScreenFragment extends Fragment {
...
private AudioPlayer mPlayer = new AudioPlayer();
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup parent, Bundle savedInstanceState) {
...
mStandbyButton = (Button)v.findViewById(R.id.standby_button);
mStandbyButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mPlayer.play(getActivity());
}
});
}
public void onDestroy() {
super.onDestroy();
mPlayer.stop();
}
}
尽管使用了 setOnCompletionListener(),但与 .wav 不同,文件会继续循环
public class AudioPlayer {
private MediaPlayer mPlayer;
public void stop() {
if(mPlayer != null) {
mPlayer.release();
mPlayer = null;
}
}
public void play(Context c) {
stop();
mPlayer = MediaPlayer.create(c, R.raw.hassium);
mPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
public void onCompletion(MediaPlayer mp) {
stop();
}
});
mPlayer.start();
}
}
如何确保播放完成后它们不会循环播放? 我可能会使用 .wav 文件,但很好奇为什么会发生这种情况,以及是否可能阻止它们循环播放。
最佳答案
搜索发现在ogg元数据中可能存在ANDROID_LOOP:ANDROID_LOOP = true -- how to avoid MediaPlayer looping audios with this metadata tag
谷歌代码中的相关工单:
MediaPlayer setLooping(false) does not work for ogg files
Should document ANDROID_LOOP flag for OGG files
您可以尝试使用 MediaPlayer.setLooping(false) 看看是否有帮助
关于android - 为什么 .ogg 文件循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26933988/