gpt4 book ai didi

Android MediaPlayer 状态变化

转载 作者:行者123 更新时间:2023-11-29 00:45:54 25 4
gpt4 key购买 nike

我希望这不是一个愚蠢的问题,因为我是 Android 的新手,但我在使用 MediaPlayer 处理状态更改时遇到了问题。媒体播放器在屏幕上工作正常,并且在屏幕不可见时继续播放声音,但是当我返回 Activity 并尝试停止媒体播放器时,它不会停止。无论如何,我看不到从 mp 获取 streamID,我可以在 onPause 和 onResume 上保存和恢复它。我一定缺少一些简单的东西。以下是我目前所拥有的一些 fragment :

    public class Noise extends Activity {
public MediaPlayer mp;

public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layour.main);

Button startButton = (Button)findViewById(R.id.startButton);
Button stopButton = (Button)findViewById(R.id.stopButton);

mp = MediaPlayer.create(this, R.raw.noise);

startButton.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v){
playSoundLoop();
}
});

stopButton.setOnClickListener(new OnClickListener(){
@Override
public void onClick(View v){
stopSound();
}
});
}

public void playSoundLoop(){
mp.setLooping(true);
mp.start();
}

public void stopSound(){
mp.pause();
//Had originally tried mp.stop, mp.reset, mp.prepare, but that didn't work any better
}

最佳答案

我不认为您正在释放原始 MediaPlayer 实例。因此,当您离开 Activity 并返回时,onCreate() 会再次被调用,您最终会得到两个实例,直到内存压力导致旧实例被释放。

简单的解决方案是在您的 Activity 离开前台时释放它,例如:

@Override
onPause() {
mp.release();
super.onPause();
}

但是,如果您希望您的音乐继续在后台播放,您需要将 MediaPlayer 引用移动到 Activity 生命周期之外的某个地方 - 可能移动到服务中。

关于Android MediaPlayer 状态变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6373872/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com