请查看以下代码,我不知道我错在哪里。 我需要在Broadcastreciever中知道应用程序是在FOREGROUND还是在BACKGROUND中。但在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;
}
答案 0 :(得分:0)
问题是应用程序不知道您的BaseApplication类。
你应该:
您的基础应用程序类应该扩展Application object
您的清单应在application
标记中指出属性name
并指向您的应用对象
P.S。 BaseApplication.activityPaused();
应该进入onPause
而不是onStop
答案 1 :(得分:0)
如果你想保持“activityVisible”的状态,你需要将它保存在SharedPreferences中。
答案 2 :(得分: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);
}