【问题标题】:MediaPlayer problems媒体播放器问题
【发布时间】:2018-06-12 10:12:10
【问题描述】:

我有一个从主(启动器)活动开始播放音乐的 MediaPlayer。我偶然发现了两个问题。

  1. 当我按下主页按钮或我的应用程序通常失去焦点时,音乐仍在播放。

  2. 当我返回主(启动器)活动时,mediaPlayer 再次启动(创建新的 mediaPlayer),结果是有两个 MediaPlayer 同时播放同一个文件。

*对于第一个问题,我尝试在 onStop() 方法中停止音乐,但是当我从主要活动转到其他活动时音乐停止,这是我不想要的,onDestroy 不起作用。

我的代码:

if (player == null) {
    player = MediaPlayer.create(this, R.raw.music);
    player.setLooping(true);
    if (!player.isPlaying()) {
       player.start();
    }
}

P.S 我希望音乐不仅可以在主要活动中播放,还可以在其他活动中播放。

【问题讨论】:

  • 您是否尝试过在onDestroy() 方法中停止MediaPlayer?
  • 对于您的第一个问题,如果您的应用在此处可见,请使用 ActivityLifeCycleCallback 获取回调stackoverflow.com/a/50510902/5689605 对于您的第二个问题,请在您的应用中创建一个单例媒体播放器,然后播放或停止。

标签: java android android-mediaplayer


【解决方案1】:

退出时您的MediaPlayer 未正确停止。每当活动停止时调用onStop(),以便进入更高优先级的活动,或者被另一个活动“暂停”(检查活动生命周期here)。在您的onDestroy() 方法中尝试this 中的stopPlaying() 方法。

对于第二个问题,您可以采用以下两种方法之一:要么坚持我上面给出的答案中的 stopPlaying() 方法,停止 MediaPlayer 并将其设置为 null,或者检查 MediaPlayer在活动开始时存在(尝试在 MediaPlayer 实例化之前检查此内容,否则 MediaPlayer 将始终存在)。

【讨论】:

  • 如何检查 MediaPlayer 是否存在?
  • 您可以使用mediaPlayer.isInitialized(),但如果您遇到异常,请检查this 答案,因为它可能会发生。如果您在退出活动之前释放媒体播放器,则不应在您回来时对其进行初始化。您是否为媒体播放器使用任何后台服务?
  • 我不使用媒体播放器服务。它在启动器活动类
【解决方案2】:

确保释放您在销毁活动时创建的 MediaPlayer 资源,方法是调用 player.release() 并在 onDestroy() 方法中取消 MediaPlayer。

     @Override
 protected void onPause() {
      super.onPause();

      if(player != null)
             player.stop();
 }

 @Override
 protected void onStop() {
      super.onStop();

      if(player != null)
             player.stop();

 }

 @Override
 protected void onDestroy() {
      super.onDestroy();

      if(player != null)
             player.stop();

 }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多