iOS cómo juzgar la aplicación se ejecuta en primer plano o en segundo plano?

Como todos sabemos, si una aplicación de iOS se está ejecutando en primer plano, la aplicación no notificará a los usuarios cuando venga la notificación de eliminación. Ahora, en mi aplicación, quiero mostrarme alerta para notificar a los usuarios que viene la notificación remota. ¿Cómo juzgar si la aplicación se está ejecutando en primer plano o en segundo plano? He encontrado los documentos y buscado stackoverflow.com y no he podido encontrar nada al respecto. Gracias.

[UIApplication shanetworkingApplication].applicationState devolverá el estado actual, revisará los valores posibles y no creará indicadores innecesarios cuando pueda usar las características del sistema.

Valores que puede considerar:

  • UIApplicationStateActive
  • UIApplicationStateInactive
  • UIApplicationStateBackground

p.ej

 +(BOOL) runningInBackground { UIApplicationState state = [UIApplication shanetworkingApplication].applicationState; return state == UIApplicationStateBackground; } +(BOOL) runningInForeground { UIApplicationState state = [UIApplication shanetworkingApplication].applicationState; return state == UIApplicationStateActive; } 

Hay casos en que verificar el estado no funciona.

Aquí hay una que encontré: si intenta usar BT y está deshabilitado, iOS mostrará un cuadro de dialog preguntando si el usuario desea activar BT. Cuando esto sucede, el estado de la aplicación no es una manera confiable para determinar si su aplicación está en primer plano.

En primer lugar, obtendrá dos events applicationDidBecomeActive: uno (correctamente) cuando aparezca la aplicación y luego otro (incorrectamente) después de que el usuario presione el button en el cuadro de dialog (mientras que la configuration de iOS es la aplicación principal).

UIApplication.applicationState dirá "Activo" aunque este no sea el caso (al less si interpreta "activo" como en primer plano, al igual que la pregunta original).

Dado que no obtendrá willEnterForeground en el primer lanzamiento, la única manera confiable de detectar si la aplicación es visible o no (por lo que he podido averiguar) es tener un indicador y luego configurarlo como verdadero en:

 applicationDidFinishLaunching applicationWillEnterForeground 

y falso en:

 applicationDidEnterBackground applicationWillResignActive