Android 应用程序onPause时具有循环音频的MediaPlayer未停止

Android 应用程序onPause时具有循环音频的MediaPlayer未停止,android,media-player,Android,Media Player,我已经编写了一个应用程序,它通过MediaPlayer在后台播放一些循环音频 当应用程序结束时,例如,通过使用回击按钮,我呼叫暂停并尝试关闭mediaplayer:- @Override public void onPause(){ super.onPause(); if (mp != null) { mp.stop(); mp.release(); mp = null; } 然而,似乎在调用onPause时,mediap

我已经编写了一个应用程序,它通过MediaPlayer在后台播放一些循环音频

当应用程序结束时,例如,通过使用回击按钮,我呼叫暂停并尝试关闭mediaplayer:-

@Override
public void onPause(){
    super.onPause();
    if (mp != null) {
        mp.stop();
        mp.release();
        mp = null;
    }
然而,似乎在调用onPause时,mediaplayer mp对象始终为空,即使循环音频仍在播放。所以这是无法阻止的

mediaplayer在类的顶部声明,并在onCreate中启动:-

public MediaPlayer mp;

@Override

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    MediaPlayer mp = MediaPlayer.create(this, R.raw.longstream);
    mp.setVolume(0.2f, 0.2f);
    mp.setLooping(true);
    mp.start();
}
那么,我是否错误地声明了mediaplayer?或者我如何让它保持正确关闭?如果对象为空,它为什么仍在播放


感激地接受任何想法…

当您在onCreate中声明MediaPlayer时,它会隐藏成员mp,因此所有方法都在onCreate中声明的对象上执行,而不是在类成员上执行:

MediaPlayer mp = MediaPlayer.create(this, R.raw.longstream);
换成

public MediaPlayer mp;

@Override

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    mp = MediaPlayer.create(this, R.raw.longstream);
    mp.setVolume(0.2f, 0.2f);
    mp.setLooping(true);
    mp.start();
}
public MediaPlayer mp;

@Override

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    mp = MediaPlayer.create(this, R.raw.longstream);
    mp.setVolume(0.2f, 0.2f);
    mp.setLooping(true);
    mp.start();
}

这是经过修改的代码,它应该是这样工作的:问题是您将mp声明为类的属性,但随后在onCreate方法中本地实例化了它