【问题标题】:Media player will not stop playing audio file after broadcast intent to stop it广播意图停止后,媒体播放器不会停止播放音频文件
【发布时间】:2012-12-19 11:21:44
【问题描述】:

我正在使用 Android MediaPlayer 类从正在运行的 Service 类播放 mp3 文件。如果用户停止查看五个活动中的任何一个,我想停止播放音乐播放器。

我尝试使用此处的代码向拥有 MediaPlayer 的服务发送广播意图。这样,当服务内部的广播接收器接收到这个意图时,它将调用 player.pause() 方法来停止播放音乐。

但是它不起作用。我在查看其中一项活动时启动了播放器,然后我离开了应用程序并查看了其他一些应用程序,例如 Android 日历应用程序。音乐不会停止并继续播放。

关于如何解决这个问题的任何想法?

   public class Monitor extends Application {

  @Override
   public void onCreate(){
   super.onCreate();

   if(activityVisible==false){
        Intent intent = new Intent();
        intent.setAction("com.sample.test");
        sendBroadcast(intent);
   }

   }


 public static boolean isActivityVisible() {
        return activityVisible;
      }  

      public static void activityResumed() {
        activityVisible = true;
      }

      public static void activityPaused() {
        activityVisible = false;

      }

      private static boolean activityVisible;

   }

这是我在其他 5 项活动中的内容;

  @Override
  protected void onResume() {
    super.onResume();
    Monitior.activityResumed();
  }

  @Override
  protected void onPause() {
     super.onPause();
    Monitor.activityPaused();
  }

【问题讨论】:

    标签: android media-player lifecycle kill


    【解决方案1】:

    创建每个活动时,不会调用 Application 类中的onCreate。这是你想要的吗?

    因此,您的 Monitor 会将 activityVisible 更改为 false,但从您发布的代码中,您不会对 boolean 采取任何行动。

    一种解决方案是创建一个MonitorActivity 并让您的所有活动扩展它。然后在MonitorActivityonCreate 中,您将发送广播以启动服务并在onPause 中停止服务。是的,这将在活动之间暂停,因此您可以在 3 秒内确定服务是否应该实际停止。

    【讨论】:

    • 听起来不错,MonitorActivity 扩展了 Activity,所有其他活动都扩展了 Monitor 活动。那么在这种情况下使用扩展应用程序的活动是否无用?
    • @Kevik 是的,我看不到它的用途,Application 类在活动生命周期之外。它对全局引用很有用,但对生命周期管理并不真正有用
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-06
    相关资源
    最近更新 更多