У меня есть приложение, которое периодически проверяет сервер на наличие определенного флага. А затем отображает сообщение в зависимости от значения этого флага.
Я не хочу отображать сообщение, тогда приложение не находится спереди. И я использую 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);
Но может ли существовать собственный метод или способ получить текущее состояние приложения (это приложение в передней части или оно в фоновом режиме)?
Какое сообщение вы показываете? Уведомление или что-то в вашей деятельности? Где в вашем приложении вам нужна эта информация штата?
Вы можете написать 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
}