как узнать, когда приложение выходит на передний план в андроиде


я разрабатываю приложение для Android, в котором я использовал tabhost для панели вкладок
на каждой вкладке я разместил FragmentActivity, которая, в свою очередь, содержит различные фрагменты
я получаю данные с сервера через сетевые вызовы и при отправке каждый вызов, который я должен отправить токен аутентификации (для которого я сначала делаю вход в систему), токен аутентификации автоматически истекает через 30 минут.
теперь проблема заключается в том, что пользователь нажимает кнопку «Домой», находясь в середине приложения приложение переходит в фоновый режим, и если пользователь снова запускает приложение, то есть переводит его на передний план (скажем, через 30 минут или более), в то время как срок действия токена аутентификации истекает, сетевой вызов завершается сбоем....
как я могу узнать, когда мое приложение выходит на передний план ????????
я искал эту проблему в Google, и решения, которые у меня есть до сих пор, следующие:

  1. используйте методы onCreate(), onPause(), onResume(), но в моем случае у меня есть 5 разных вкладок, и в соответствии с этим решением мне нужно будет проверить каждый метод FragmentActivity, также эти методы вызываются не только при возобновлении приложения, но и переключение вкладок и начальное создание FragmentActivities....
  2. второй подход, который у меня есть, - это использование ActivityManager

ни один из подходов мне не подходит ............ м в середине моего приложения и действительно нужна помощь


person Khurram Shehzad    schedule 16.06.2013    source источник
comment
когда вы вернетесь на передний план, будет вызван ваш onResume(). Но я думаю, что проблема в дизайне - вы можете найти фоновую службу более подходящей для общения.   -  person Amir Uval    schedule 16.06.2013
comment
Не было бы проще просто запросить с известным токеном, если он не работает, просто запросить новый и продолжить после этого?   -  person Joel Bodega    schedule 16.06.2013


Ответы (1)


Используйте следующий код:

ActivityManager activityManager = (ActivityManager) appContext.getSystemService(Context.ACTIVITY_SERVICE);
List<RunningTaskInfo> services = activityManager
        .getRunningTasks(Integer.MAX_VALUE);
boolean isActivityFound = false;

if (services.get(0).topActivity.getPackageName().toString()
        .equalsIgnoreCase(appContext.getPackageName().toString())) {
    // Your activity is in foreground, do what you've got to do..
}

Вам нужно разрешение:

<uses-permission android:name="android.permission.GET_TASKS" />
person Udi Oshi    schedule 16.06.2013
comment
спасибо за немедленный ответ, но если я не ошибаюсь, мне придется поместить этот код в службу, которая постоянно работает в фоновом режиме, чтобы проверить возобновление работы приложения, а также этот подход предназначен для целей отладки. проверьте решение Эмиля [stackoverflow.com/questions/4414171/ и комментарии к своему решению - person Khurram Shehzad; 16.06.2013
comment
Ну... если Google отклонит эту функцию в производственном режиме, значит, она вам не поможет. - person Udi Oshi; 16.06.2013