2010-10-16 15 views
15

¿Hay alguna manera de apagar la pantalla mediante programación en iOS? No solo baja el brillo, sino que se apaga igual que la aplicación del teléfono. Me complace utilizar API privada, ya que es para uso personal.Apagar la pantalla en iPhone OS (iOS)

Gracias!

+0

¿Puedes decir por qué el botón de encendido no funciona para ti? – nycynik

Respuesta

4

La única forma que conozco, pública o privada, es usar el botón de encendido.

lo podría hacer en -[UIApplication setProximitySensingEnabled:(BOOL)] o -[UIApplication setIdleTimerDisabled:YES], esto podría conducir a algo útil

-1

No creo que hay alguna para apagar la pantalla (simulando botón de suspensión iPhone), excepto cambiar el brillo.

Esto link podría ayudar.

+0

GSEventSetBacklightFactor sonaba como la función correcta, pero lamentablemente se ha eliminado del SDK. ¿Alguna sugerencia para un reemplazo? – nitsky

+0

'GSEventSetBacklightFactor' nunca ha sido parte del SDK oficial por la sencilla razón de que Apple no desea que pueda ajustar el brillo de la pantalla ni apagarlo más de lo que desea que pueda hacer llamadas telefónicas. o compras en la tienda de aplicaciones en nombre del usuario. – Tommy

+0

GSEventSetBacklightFactor fue eliminado por completo (ni siquiera es una API privada). –

22

Puede apagar la pantalla activando la supervisión de proximidad. Apagará automáticamente la pantalla, como en la aplicación Teléfono, colocando el teléfono cerca de sus oídos o colocando un dedo sobre el sensor IR en la parte superior del teléfono.

[UIDevice currentDevice].proximityMonitoringEnabled = YES; 
+0

¿Puedo establecer una proximidad de alguna manera? Quiero decir que no puedo forzar programáticamente a un usuario a un teléfono cerca de las orejas :) Y necesito convertirlo completamente en negro. –

+1

Intenté usar un método privado _setProximity: (BOOL) en UIDevice, pero no apagó la pantalla. –

0

Ha intentado:

[[UIScreen mainScreen] setBrightness: yourvalue];

SO cuestionar 8936999: iPhone: How can we programmatically change the brightness of the screen?

+0

Gracias. Intentaré mañana. Sin embargo, supongo que podrá controlar el brillo solo en el mismo rango que la aplicación de Preferencias (que no apaga la pantalla por completo, pero puede ser mucho más oscura) –

+1

Lo probé. Atenúa la pantalla, pero no la hace negra. –

14

usted puede hacer esto, (obviamente, usando APIs privadas, por supuesto):

en IOS5 :

#include <stdio.h> 
#include <dlfcn.h> 

int (*SBSSpringBoardServerPort)() = (int (*)())dlsym(RTLD_DEFAULT, "SBSSpringBoardServerPort"); 
int port = SBSSpringBoardServerPort(); 
void (*SBDimScreen)(int _port,BOOL shouldDim) = (void (*)(int _port,BOOL shouldDim))dlsym(RTLD_DEFAULT, "SBDimScreen"); 

y luego usar

SBDimScreen(port,YES); 

siempre que lo desee para atenuar y

SBDimScreen(port,NO); 

cada vez que desee desatenuación.

En iOS6:

void (*BKSDisplayServicesSetScreenBlanked)(BOOL blanked) = (void (*)(BOOL blanked))dlsym(RTLD_DEFAULT, "BKSDisplayServicesSetScreenBlanked"); 

y luego usar:

BKSDisplayServicesSetScreenBlanked(1); // 1 to dim, 0 to undim 

"Dim" aquí significa totalmente apagar la pantalla. Esto es lo que usa el sistema cuando, por ejemplo, un evento de proximidad ocurre mientras está en una llamada.

+2

¿Lo intentó en iOS 6? Silenciosamente falla (no hace nada). Estoy bajo la impresión de que internamente verifica algún derecho. –

+1

BTW. Vi que publicaste algunas cosas interesantes sobre Proximity Sensor y en iPhoneDevWiki. ¿Te importa enviarme un correo electrónico (mi correo electrónico está en mi perfil). Me gustaría que me preguntes una cosa al respecto. –

+1

Tiene razón acerca de iOS6, acaba de probarlo. Agregué el código que necesita para iOS6 para que funcione. –

0

La proximidad no funciona en todos los dispositivos. Hay una solución mucho más simple para este problema sin recurrir a API privadas.

Swift

UIScreen.main.wantsSoftwareDimming = true 
UIScreen.main.brightness = 0.0 

Sin wantsSoftwareDimming, la luz de fondo nunca se apague completamente. Los documentos tienen esta frase de advertencia:

El valor predeterminado es falso. Habilitarlo puede causar una pérdida en el rendimiento.

Cuestiones relacionadas