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.
¿Puedes decir por qué el botón de encendido no funciona para ti? – nycynik