0

次のコードを確認してください。どこが間違っているのかわかりません。アプリケーションがフォアグラウンドにあるかバックグラウンドにあるかをBroadcastrecieverで知る必要があります。しかし、Receiver では常に FALSE を返します。BASEAPPLICATION の静的変数の値が失われるのはなぜですか?? 常に FALSE を表示する理由

public class Main extends Activity  {
        @Override
        protected void onResume() {
                  super.onResume();
                  BaseApplication.activityResumed();
                  AlarmManager am = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
                  Intent intent = new Intent(context, Recevier.class);
                  PendingIntent pi = PendingIntent.getBroadcast(context, intentCode, intent, PendingIntent.FLAG_UPDATE_CURRENT);
                  am.set(AlarmManager.RTC_WAKEUP, System.currentMilliSeconds() + 2000, pi);
        }
        protected void onStop() {
            super.onStop();
            BaseApplication.activityPaused();
            }

放送受信機

@Override
    public void onReceive(Context context, Intent intent) {
        if(BaseApplication.isActivityVisible()){
         // Application is Running

        }
       else{
          // Applicaiton is not Running
//**ALWAYS GIVING FALSE**
            }
    }

*ベースアプリケーション *

public class BaseApplication {
    public static boolean isActivityVisible() {

        return activityVisible;
      }  

      public static void activityResumed() {
        activityVisible = true;

      }

      public static void activityPaused() {
        activityVisible = false;

      }

      private static boolean activityVisible;

}
4

3 に答える 3

0

アクティビティ スタックのトップ アクティビティを確認する必要があります。

public boolean isActivityVisible(Context context) {
    ActivityManager am = (ActivityManager) context.
    getSystemService(Activity.ACTIVITY_SERVICE);
    String className = am.getRunningTasks(1).get(0).topActivity.getClassName();
    return Main.class.getName().equals(className);
}
于 2013-09-17T08:01:15.190 に答える