2

Android MediaPlayerクラスを使用して、実行中のServiceクラスからmp3ファイルを再生しています。ユーザーが5つのアクティビティのいずれかを表示しなくなった場合に、音楽プレーヤーの再生を停止したかったのです。

ここのコードを使用して、MediaPlayerを保持するサービスにブロードキャストインテントを送信してみました。そうすれば、サービス内のブロードキャストレシーバーがこのインテントを受信すると、player.pause()メソッドを呼び出して、音楽の再生を停止します。

しかし、それは機能していません。アクティビティの1つを表示しながらプレーヤーを起動し、次にアプリケーションを終了して、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();
  }
4

1 に答える 1

1

onCreate各アクティビティが作成されるときに、Applicationクラス内は呼び出されません。これはあなたが意図したことですか?

したがって、モニターはactivityVisiblefalseに変更しますが、投稿したコードからはこれに何も作用しませんboolean

1つの解決策は、を作成し、MonitorActivityすべてのアクティビティでこれを拡張することです。次に、onCreateのでMonitorActivityブロードキャストを送信してサービスを開始し、サービスをonPause停止します。はい、これはアクティビティ間で一時停止するため、サービスを実際に停止する必要があるかどうかを3秒間確認できます。

于 2012-12-19T11:24:27.510 に答える