Есть ли способ получить текущее состояние приложения?

1

У меня есть приложение, которое периодически проверяет сервер на наличие определенного флага. А затем отображает сообщение в зависимости от значения этого флага.

Я не хочу отображать сообщение, тогда приложение не находится спереди. И я использую SharedPreferences для сохранения состояния приложения вручную. В каждом упражнении я делаю что-то вроде:

@Override
protected void onStart() {
    super.onStart();
    SharedPreferences.Editor prefs = context.getSharedPreferences("myprefs", getApplicationContext().MODE_PRIVATE).edit();
    prefs.putBoolean("appInFront", true);
    prefs.commit();
}
@Override
protected void onPause() {
    super.onPause();
    SharedPreferences.Editor prefs = context.getSharedPreferences("myprefs", getApplicationContext().MODE_PRIVATE).edit();
    prefs.putBoolean("appInFront", false);
    prefs.commit();
}

И это позволяет мне получить состояние приложения из предпочтения "appInFront":

SharedPreferences prefs = context.getSharedPreferences("myprefs", Context.MODE_PRIVATE);
boolean appInFront = prefs.getBoolean("appInFront", true);      

Но может ли существовать собственный метод или способ получить текущее состояние приложения (это приложение в передней части или оно в фоновом режиме)?

Теги:
application-state

1 ответ

3
Лучший ответ

Какое сообщение вы показываете? Уведомление или что-то в вашей деятельности? Где в вашем приложении вам нужна эта информация штата?

Вы можете написать BaseActivity и распространить все другие действия. Поэтому вам нужно написать меньше кода. И в качестве аналога onPause() вы должны использовать onResume():

public class BaseActivity{

public static boolean appInFront;

@Override
protected void onResume() {
    super.onResume();
    appInFront = true;
}
@Override
protected void onPause() {
    super.onPause();
    appInFront = false;
}

}

С этим статическим общедоступным логическим вы можете спросить "в любом месте" о состоянии видимости вашего приложения. Вероятно, вам не нужно запоминать состояние между перезагрузками приложений, поэтому достаточно булевского.

if(BaseActivity.appInFront){
    //show message
}
  • 0
    Я использую уведомления о тостах в BroadcastReceiver, как в ApiDemos / app / AlarmController из примеров SDK.
  • 0
    Спасибо, Геррманн, я так и сделал.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню