簡體   English   中英

廣播接收器中的靜態變量

[英]Static Variable in Broadcast Receiver

請查看以下代碼,我不明白自己在哪里。 我需要在Broadcastreciever中知道APPLICATION是處於前台還是在背景中。 但是在Recevier中,它總是返回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;

}

問題是應用程序不知道您的BaseApplication類。

你應該:

  1. 您的基本應用程序類應擴展Application對象

  2. 您的清單應在application標記中指出屬性name並指向您的應用程序對象

PS BaseApplication.activityPaused(); 應該進入onPause而不是onStop

如果要保持“ activityVisible”狀態,則需要將其保存在SharedPreferences中。

您最好檢查活動堆棧的頂級活動。

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);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM