0

私はサービスとアプリケーションを持っています。特定の状況で意図を送信することにより、それらの間の通信があります。アクティビティでは、ブロードキャスト レシーバーを登録および登録解除して、このインテントを収集します。特定のコールバック メソッドが実行されると、サービスからのインテントが送信されます。アクティビティがフォアグラウンドにある場合にのみ、このインテントを送信する可能性はありますか? これが非表示の場合、このインテントを収集する必要がないためです (リアルタイムでいくつかの状況を表示するだけで役立ちます)。in activity はそのような状況を示す静的フィールドである可能性があることがわかりましたが、サービスからアクティビティにアクセスする方法がわかりません。さらに、これはさまざまな悪い設計慣行であるという情報が見つかりました..何か提案をありがとう!

4

3 に答える 3

0

あなたの中でこれを宣言してくださいActivity

public static boolean isRunning;

次に、onPause設定するisRunning = false;

そしてonResumeそれをisRunning = true;

次に、あなたからService呼び出すだけActivityName.isRunningで、それがフォアグラウンドにあるかどうかを知ることができます!

于 2013-09-30T10:43:22.327 に答える
0

アクティビティ内で静的変数を使用できます。

class MyActivity extends Activity {
     static boolean active = false;

      @Override
      public void onStart() {
         super.onStart();
         active = true;
      } 

      @Override
      public void onStop() {
         super.onStop();
         active = false;
      }
}

ジャストチェックインサービスを追加

if(MyActivity.active)
{
//send broadcast.
}

または、これを使用して、アクティビティのステータスがアクティブかどうかを確認します

public boolean isRunning(Context ctx) {
        ActivityManager activityManager = (ActivityManager) ctx.getSystemService(Context.ACTIVITY_SERVICE);
        List<RunningTaskInfo> tasks = activityManager.getRunningTasks(Integer.MAX_VALUE);

        for (RunningTaskInfo task : tasks) {
            if (ctx.getPackageName().equalsIgnoreCase(task.baseActivity.getPackageName())) 
                return true;                                  
        }

        return false;
    }
于 2013-09-30T10:48:35.897 に答える