在旋转屏幕时处理Android的MediaPlayer,按下主页按钮或应用程序会中断

时间:2014-10-08 21:28:26

标签: android android-activity android-mediaplayer activity-lifecycle screen-rotation

我在我的应用上的工作流程/设计中处于棘手的部分。

我有一个运行到服务的MediaPlayer。当用户离开(但不是关闭)应用程序时,我希望音乐停止。也就是主页按钮。

因此,我分别将MediaPlayer的pause()start()方法实施到了活动onStop()onResume()中。当使用按钮进行测试并重新启动应用程序时,这样可以正常工作,但是当屏幕因活动的生命周期而旋转时也会发生这种情况。

那么,我怎样才能以高效/优雅的方式避免这种情况呢?旋转设备时,音乐不能被中断。我想在重写Home Button的click方法时,暂停MediaPlayer并设置一个全局布尔标志来检查onResume()是否必须恢复MediaPlayer。但在我看来,这似乎是一个黑客左右,而不是一个好的做法。

我错了吗?还有更好的方法吗?

感谢任何建议。

1 个答案:

答案 0 :(得分:2)

这里有几个选项:

如果你的minSdkVersion至少为14,你可以在停止媒体播放器之前检查isChangingConfigurations()标志:

@Override
protected void onStop() {
    if (!isChangingConfigurations()) {
        // Stop the Media Player
    }
}

否则,您可以关注onUserLeaveHint()

@Override
protected void onUserLeaveHint() {
    // Stop the Media Player
}

虽然如果另一个应用程序被强行吸引到前台(例如来电话),则不会被呼叫。

编辑:作为替代方案,您可以依赖onWindowFocusChanged()。使用Home或Back离开活动时会调用false,但不会更改配置。当另一项活动被带到前面时,也应该调用它。

@Override
public void onWindowFocusChanged(boolean hasFocus) {
    // Stop the MediaPlayer
}

作为旁注,您通常应使用对称生命周期方法(例如,而不是onPause()onStart()使用onPause() / onResume()onStop() / onStart()