[英]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類。
你應該:
您的基本應用程序類應擴展Application對象
您的清單應在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.