android MediaPlayer在大约5秒后停止播放

cs7cruho  于 2023-08-01  发布在  Android
关注(0)|答案(3)|浏览(203)

我目前正在开发一个简单的游戏,现在是时候添加音乐和声音效果。我尝试使用MediaPlayer,就像这里描述的那样:Android media player bug
然而,我有另一个问题,MediaPlayer停止播放音乐后,约5秒钟。可能是什么原因造成的?

q8l4jmvw

q8l4jmvw1#

我也有这个问题。这可能是因为MediaPlayer对象只存在于一个方法中。
举例来说:

//ERROR, stops after 5 sec!
public static void playMusic(int id)
{
  MediaPlayer mediaPlayer = MediaPlayer.create(context, id);
  mediaPlayer.setLooping(true);
  mediaPlayer.start();
}

字符串
最有可能的情况是,垃圾回收器将进入并清除MediaPlayer对象。
这为我修复了错误:

//mediaPlayer-object will not we cleaned away since someone holds a reference to it!
private static MediaPlayer mediaPlayer;

public static void playMusic(int id)
{
    mediaPlayer = MediaPlayer.create(context, id);
    mediaPlayer.setLooping(true);
    mediaPlayer.start();
}

owfi6suc

owfi6suc2#

在我的例子中,这只是因为在对话框中使用MediaPlayer,并且在播放声音后调用dismiss()函数,因此垃圾收集器将消除MediaPlayer对象,并导致MediaPlayer停止工作,在这种情况下播放声音的更好方法是在父类中播放它,而不是像这样在对话框中播放它

/* declare myAudio as public */

myAudio = MediaPlayer.create(this, R.raw.my_audio);
CustomDialog cdd = new CustomDialog(MainActivity.this);
cdd.show();
Button playMyMediaSoundBtn = cdd.findViewById(R.id.play_button);
playMyMediaSoundBtn.setOnClickListener(new View.OnClickListener() {
     @Override
     public void onClick(View v) {
            myAudio.start();
            cdd.dismiss();
        }
     });

字符串

ef1yzkbh

ef1yzkbh3#

您应该创建一个异步代码,让媒体播放器播放他在后台播放的内容。大概是这样的:

final MediaPlayer mp = MediaPlayer.create(MainActivity.this, R.raw.nomarxia);

                Handler mHandler = new Handler();
                mHandler.postDelayed(new Runnable() {
                    public void run() {
                        mp.start();
                    }
                }, mp.getDuration());

字符串

相关问题