2012-02-29 17 views
12

Tengo una función en mi aplicación (una aplicación de metrónomo para músicos) para atenuar la pantalla a fin de ahorrar batería. Para ajustar el brillo, estoy usando:No se puede restaurar el brillo en la salida de la aplicación

[UIScreen mainScreen].brightness = 0.1; 

Estoy ahorrando el brillo original en la aplicación puesta en marcha en viewDidLoad (...) y el ahorro que a mis predeterminadas del usuario.

Al cambiar puntos de vista dentro de la aplicación, puedo recuperar el brillo original a partir de la configuración de usuario y restablecer los datos con una llamada:

[UIScreen mainScreen].brightness = originalBrightness; 

Esto funciona bien. Tengo mensajes NSLog (...) que muestran el valor original, etc ... para que el mecanismo funcione.

El problema que estoy teniendo es cómo restaurar el brillo original en la salida de la aplicación cuando se presiona el botón de inicio.

he añadido un código similar a mis métodos de delegado de aplicación para:

applicationWillResignActive(...) 
applicationDidEnterBackground(...) 
applicationWillTerminate(...) 

Cada uno tiene una llamada a un método para establecer el brillo de la pantalla como antes en la vista con NSLog similar (...) s que muestra el recuperó el brillo original ... y todo está correcto. También he depurado y las llamadas para establecer el brillo se están realizando ... pero la aplicación se cierra y la pantalla del dispositivo se encuentra todavía en el nivel inferior, atenuado.

Por último, si hace clic en el botón "bloquear" en la parte superior, presione el botón de inicio para activarlo ... el brillo es correcto.

Mi sospecha es que cualquier acción o evento que se desencadene con mi llamada para establecer el brillo cuando la aplicación se está saliendo no se está procesando, tal vez debido a un estado no válido o similar.

Además, mi aplicación está configurado para no ejecutar en segundo plano, situado en el info.plist como:

Application does not run in background  YES 

Cualquier ayuda sería muy apreciada.

Gracias!

+1

¿Son estas API privadas? No veo las propiedades mainWindow ni mainWindows (typo?) En la clase UIScreen. ¿Te refieres a mainScreen? – picciano

+0

Sí, error tipográfico de mi parte. I is is '[UIScreen mainScreen] .brightness = val;' o [[UIScreen mainScreen] setBrightness: val]; ' – Cal30

+0

Estoy bastante seguro de que no hay forma de que esta configuración sea persistente fuera de tu aplicación. La documentación de Apple no dice específicamente esto, pero he visto otras dos aplicaciones que cambian el brillo en este caso. Alguien [aquí] (http: // stackoverflow.com/a/7901339/76810) está de acuerdo. – SSteve

Respuesta

1

iOS le permite a esa aplicación un poco de tiempo antes de salir. Puede probar sleep durante una fracción de segundo después de configurar el brillo.

+0

@piccano Lo intenté después de publicar aquí, pero en el delegado fue en vano. Intenté: [code] sleep() [/ code] así como [code] [Thread sleepForTimeInterval:] [/ code] pero no cambio. – Cal30

0

Si lee https://devforums.apple.com/thread/139813 con cuidado, dice que los cambios de brillo no son permanentes. El brillo original del usuario está de vuelta, cuando presionas el botón de bloqueo y lo desbloqueas nuevamente. En realidad, tuve que restaurar mi brillo de aplicación si el usuario golpea el botón de bloqueo, mientras que mi aplicación se está ejecutando:

- (void)applicationDidBecomeActive:(UIApplication *)application{ 
    [self setBrightness]; 
} 
0

No tenía mucha alegría con esto. La solución consistía en restablecer el brillo en una vista ViewControllerWillDisappear. No es una gran solución, pero la única que he encontrado hasta ahora para trabajar (esto se ha roto durante años ...)

Cuestiones relacionadas