2011-06-10 5 views
20

Noté en mi iPhone, después de unos segundos de estar en la luz directa del sol, la pantalla se ajustará para ser más brillante, más tenue etc. Me preguntaba si había una manera de interactuar con este sensor ?Leyendo el sensor de luz ambiente del iPhone

Tengo una aplicación que se usa en el exterior. Cuando entra a la luz directa, se vuelve muy difícil ver la pantalla durante algunos momentos, antes de que se ajuste. Y aun así, no siempre es tan brillante como me gustaría que fuera. Me gustaría implementar una piel de alto contraste para ver en exteriores y un bajo contraste para ver en interiores.

¿Es posible leer los datos del sensor de luz? Si es así, ¿cómo puedo extraer estos valores del sensor?

Supongo que hay un sensor de luz, ya que la cámara sabe cuándo usar el flash.

+0

Es extremadamente frustrante que esta pregunta (y [la respuesta acerca del uso del brillo de la pantalla] (http://stackoverflow.com/a/15937484/2547229)) no se muestre para la mayoría de los S.O. búsquedas que hago sobre este tema. Incluso sabiendo que la pregunta y la respuesta están aquí, no pude encontrarlo. Afortunadamente, pondría un enlace en un comentario en mi código. – Benjohn

+0

He editado el título de algo que espero que se muestre en los resultados. ¡Lo siento si esto no es apropiado! – Benjohn

Respuesta

5

Intente utilizar GSEventSetBacklightLevel();, que requiere <GraphicsServices/GraphicsServices.h>. Así es como uno puede ajustar programáticamente los niveles de brillo. También hay una opción get, por lo que creo que puede que tenga la información que busca.

+2

De acuerdo con esta página, http://www.iphonedevsdk.com/forum/iphone-sdk-development/6400-adjusting-screen-brightness.html, apple eliminará su aplicación de la tienda de aplicaciones si intenta meterse con la brillo.Realmente me gustaría cambiar los esquemas de color según la cantidad de brillo que detecta el teléfono. –

+1

@George, vale, entonces lea la configuración actual y configure una notificación si cambia. Entonces puedes ajustar en consecuencia. – PengOne

+0

Lo siento, no veo esta opción 'get'. ¿Podrías publicar un enlace? – Randomblue

10

Para leer los datos del sensor de luz ambiental, necesita usar IOHID en el marco IOKit.

http://iphonedevwiki.net/index.php/AppleISL29003

http://iphonedevwiki.net/index.php/IOKit.framework

Sin embargo, esto requiere cabeceras privadas, por lo que si lo usa, Apple probablemente no va a dejar que su aplicación en la tienda de aplicaciones.

Pregunto continuamente a los foros de iOS si habrá soporte para las lecturas del sensor de luz ambiental en el futuro, pero fue en vano.

17

Por otro lado, esta es una idea diferente (tal vez una tontería), usando el brillo de la pantalla del dispositivo puede obtener algún valor de las condiciones externas.

De 0,12 (oscuro) a 0,99 (luz)

La siguiente línea conseguir esos valores, darle una oportunidad, poner algo de luz dentro y fuera sobre el dispositivo para obtener valores diferentes.

NSLog(@"Screen Brightness: %f",[[UIScreen mainScreen] brightness]); 

Obviamente la función de Brillo automático debe activarse para que funcione.

Atentamente.

+2

¡MUY listo, y funciona como un encanto! : D Aunque de acuerdo con los documentos de Apple, no va de 0.12 a 0.99: "El valor de esta propiedad debe ser un número entre 0.0 y 1.0, inclusive". –

+0

esto es increíble !! –

+3

'UIScreen' también publica' UIScreenBrightnessDidChangeNotification' cuando cambia el nivel. – Benjohn

7

Puede utilizar la cámara para hacer esto, que es independiente de la configuración de brillo de la pantalla del usuario (y funciona incluso si el Brillo automático está DESACTIVADO).

Has leído el Valor de Brillo de los metadatos de los marcos de video como explico en this Stack Overflow answer.

+0

¿esto encendería la cámara? y, por lo tanto, ¿también le pides permiso al usuario para hacerlo? –

+0

Sí, lo haría. Cualquier uso de la cámara hace esto. – Wildaker

Cuestiones relacionadas