【问题标题】:MediaPlayer continue playing in background even after mediaplayer.pause();MediaPlayer 即使在 mediaplayer.pause() 之后继续在后台播放;
【发布时间】:2018-05-29 13:46:09
【问题描述】:

我正在使用 MediaPlayer。我想做一个在线流媒体广播。现在我有这个 mediaPlayer 对象(MediaPlayer),比如在片段 1 中,当我在片段 1 上时它可以正常播放,只要我转到片段 2,它仍在播放,但问题是当我再次回到片段 1 时然后我尝试在通过

按下 ImageButton 时停止它
if(mediaPlayer != null && mediaPlayer.isPlaying()) {
    mediaPlayer.pause();
}

但它不会停止并继续在后台播放,当我点击播放该音频时,我会听到两个音频,即新的一个和前一个在后台播放。

我也用过

if(mediaPlayer != null && mediaPlayer.isPlaying()) {
    mediaPlayer.stop();
    mediaPlayer.release();
    mediaPlayer = null;
}

这也行不通。

【问题讨论】:

  • 你确定你只使用了一个 mediaPlayer 实例吗?
  • 是的,使用 mediaPlayer.pause();我只使用了一个实例,但是当我使用 mediaPlayer.stop();然后我不得不根据文档创建新实例

标签: android android-fragments android-mediaplayer audio-streaming


【解决方案1】:
@Override
protected void onSaveInstanceState(Bundle outState) {
    outState.putBoolean("media_player_state", isStarted);
    super.onSaveInstanceState(outState);
}

然后在 onCreate(Bundle savedInstanceState)..

if(savedInstanceState!=null && savedInstanceState.containsKey("media_player_state")){
        isStarted = savedInstanceState.getBoolean("media_player_state");
    }
    else {
        isStarted = false;
    }

然后在button.OnClick()中

if(isStarted == true) mediaPlayer.stop();
else mediPlayer.play();

【讨论】:

  • 我已经初始化了 isStarted = false;全球范围内。这会造成问题吗?
  • 不,不是,如果你不明白为什么需要这些东西,请阅读developer.android.com/guide/components/activities/…
  • 请不要忘记在每次单击按钮时设置 isStarted 的值... if(isStarted == true{ mediaPlayer.stop(); isStarted = false;} else{mediaPlayer .start(); isStarted = true;}
【解决方案2】:

尝试添加额外的检查 onCLick

if(mediaPlayer.isPlaying()) {
    mediaPlayer.stop();
    mediaPlayer.release();
    mediaPlayer = null;
}

【讨论】:

    【解决方案3】:

    这看起来像一个状态问题.. 当你改变片段时,你应该把按钮的状态放在 onSaveInstantState() 中!当您返回原始片段时,如果不保存按钮的状态,则按钮的活动无法知道按钮之前是否已经按下。 您可以尝试使用布尔变量来了解按钮是否被按下,然后将此变量保存到 saveInstantState 中!比在创建时您可以检查此布尔值的值并将按钮设置为正确的状态..

    【讨论】:

    • 它与按钮状态无关。按钮的状态非常好。它的一些媒体播放器问题。当我回到片段 1 时,我无法再次访问 mediaPlayer 实例
    • 是的,我知道.. 如果您将媒体播放器的实例保存在布尔变量中.. 然后在 onCreate 中您可以简单地执行 If(variable = true) MediaPlayer.stop Else MediaPlayer.play
    • 我已经做到了。 if(isStarted){mediaPlayer.stop();}else{mediaPlayer.play();}。但不幸的是,这不起作用
    • 你能更新你对 savedInstanceState 的回答吗?我不明白你
    • 你是否在 onSaveInstantState() 中保存了 isStarted 变量??没有这个就无法工作
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-27
    • 2017-10-12
    • 1970-01-01
    • 1970-01-01
    • 2014-08-16
    相关资源
    最近更新 更多