简体   繁体   English

广播接收器中的静态变量

[英]Static Variable in Broadcast Receiver

Please review following code, i am not understanding where i am WRONG. 请查看以下代码,我不明白自己在哪里。 I need to know in Broadcastreciever whether APPLICATION IS AT FOREGROUND or in BACKGROUND. 我需要在Broadcastreciever中知道APPLICATION是处于前台还是在背景中。 But in Recevier it always Returning FALSE. 但是在Recevier中,它总是返回FALSE。 Why the value of static variable in BASEAPPLICATION lost?? 为什么BASEAPPLICATION中的静态变量值丢失了? Why its Showing FALSE always 为什么它总是显示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();
            }

BROADCAST RECIEVER 广播接收器

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

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

* BASE APPLICATION * * 基础应用*

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;

}

The problem is the application is not aware of your BaseApplication class. 问题是应用程序不知道您的BaseApplication类。

You should: 你应该:

  1. Your base application class should extend Application object 您的基本应用程序类应扩展Application对象

  2. Your manifest should point out in the application tag the attribute name and point to you application object 您的清单应在application标记中指出属性name并指向您的应用程序对象

PS the BaseApplication.activityPaused(); PS BaseApplication.activityPaused(); should go into onPause and not onStop 应该进入onPause而不是onStop

如果要保持“ activityVisible”状态,则需要将其保存在SharedPreferences中。

You had better to check the top activity of activity stack. 您最好检查活动堆栈的顶级活动。

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