2009-11-05 10 views
13

estoy usando esto en applicationDidFinishLaunching de mi AppDelegate: método para asegurarse de que el iPhone no se va a dormir durante el tiempo de la aplicación está abiertaiPhone - teléfono se va a dormir, incluso si idleTimerDisabled es SÍ

[application setIdleTimerDisabled:YES]; 

Se funciona muy bien en todas las pantallas, pero en una de las pantallas el iPhone se queda dormido. No pude entender cómo reproducir esto y parece suceder en momentos aleatorios.

¿Puede alguien decirme cómo manejar esta situación?

Gracias

Respuesta

8

puse y poco establecer esta propiedad a lo largo de mi aplicación usando:

[UIApplication sharedApplication].idleTimerDisabled = YES; 

se establece este donde estés teniendo problemas podría solucionarlo, aunque podría ser una solución de curita.

1

establecer esta propiedad en el método del delegado aplicación +initialize, por ejemplo:

+ (void) initialize { 
    if ([self class] == [MyAppDelegate class]) { 
     UIApplication* myApp = [UIApplication sharedApplication]; 
     myApp.idleTimerDisabled = YES; 
    } 
} 
-3

Creo que el setIdleTimerDisabled no existe en la clase UIApplication. Las búsquedas de propiedades no solo establecen el método sino también otros métodos con nombres similares.

Use dot accessor es la mejor manera de resolver su problema.

+1

Si no existiera el método, la aplicación se estrellaría en tiempo de ejecución, suponiendo que las personas con discapacidad o ignorado las advertencias del compilador ... – benzado

1

Tuve un problema similar, y el reinicio del teléfono lo solucionó. No pude encontrar una solución programática, ya que incluso los temporizadores que llamaban a la función idleTimerDisabled en un intervalo de un segundo tampoco lo solucionaban.

9

tratan de utilizar

[UIApplication sharedApplication].idleTimerDisabled = NO; 
[UIApplication sharedApplication].idleTimerDisabled = YES; 

en lugar de

[UIApplication sharedApplication].idleTimerDisabled = YES; 

truco divertido pero funciona

ver también el hilo idleTimerDisabled not working since iPhone 3.0

4

Si la aplicación está utilizando la cámara y luego APP ir a dormir después de usar la cámara. Por lo tanto, debe agregar UIRequiredDeviceCapabilities en su aplicación. Diferentes dispositivos que puede agregar como se muestra here

+0

¿Tiene más información sobre esta cosa de la cámara? blog/artículo o algo así? porque no podemos realmente agregar UIRequiredDeviceCapabilities para la cámara ya que no es necesario para usar nuestra aplicación. – Buju

+0

@Buju En mi aplicación, descubrí que después de usar la cámara, la ** aplicación de la cámara ** sobrescribe la configuración 'idleTimer'. Después de especificar el problema 'UIRequiredDeviceCapabilities' es fijo. Mire en http://blog.manbolo.com/2012/05/02/how-to-indicate-what-devices-are-supported-by-your-ios-app. –

+0

¿No podemos simplemente desactivar el temporizador inactivo después de regresar del selector de cámara? Voy a intentar eso. –

10

Afortunadamente, esta pregunta se publicó hace 5 años, y Xcode ha hecho saltos de progresión desde entonces.

Sin embargo ... este error todavía está vivo y pateado en 2015, con Xcode 6.2 y iOS 8.2.

Esto es lo que realmente tiene que hacer, para evitar que su dispositivo se quede dormido.

(tomar una cerveza, esto es doloroso.)

Cuando mi aplicación corrió por primera vez en un dispositivo, sería cargar un montón de datos de un servicio Web. Sin embargo, si tardara demasiado en ejecutarse, la pantalla se desvanecería, luego se apagaría, el dispositivo se bloquearía y mi solicitud web terminaría con un feo "Error de conexión de red".

Intenté agregar el código para simplemente establecer/deshacer el valor idleTimerDisabled, pero este cambio no duró mucho, y el dispositivo todavía se autobloqueó después de un tiempo.

// This didn't work for me (for very long !) 
[UIApplication sharedApplication].idleTimerDisabled = NO; 
[UIApplication sharedApplication].idleTimerDisabled = YES; 

su lugar, lo que tenía que hacer (suspiro deprimido ..) era tener un conjunto temporizador/desarmar este valor cada 20 segundos.

En mi archivo .h:

@property (strong, nonatomic) NSTimer* stayAliveTimer; 
-(void)callEveryTwentySeconds; 

En mi archivo .m:

-(void)callEveryTwentySeconds 
{ 
    // DON'T let the device go to sleep during our sync 
    [[UIApplication sharedApplication] setIdleTimerDisabled:NO]; 
    [[UIApplication sharedApplication] setIdleTimerDisabled:YES]; 
} 

-(void)loadDataFromWebService 
{ 
    self.stayAliveTimer = [NSTimer scheduledTimerWithTimeInterval:20.0 
                  target:self 
                 selector:@selector(callEveryTwentySeconds) 
                 userInfo:nil 
                  repeats:YES]; 

    // 
    // Code to call our web service in a background thread and wait 
    // for it to finish (which might take a few minutes) 
    // 

    // Kill off our "Stay alive" timer, and allow the device to Auto Lock whenever it wants. 
    [self.stayAliveTimer invalidate]; 

    // Give our device permission to Auto-Lock when it wants to again. 
    [[UIApplication sharedApplication] setIdleTimerDisabled:NO]; 
} 

En realidad, Apple?

Es 2015, y Xcode es realmente sigue siendo tan malo ...?

Espero que este código ayude a otras víctimas de Xcode.

+4

Se llama _Xcode_ y esto realmente no es un problema del IDE. Apunta tu enojo apropiadamente. – Tricertops

+3

Mis disculpas a todos por mi letra mayúscula incorrecta con el nombre Xcode. Me siento tan tonto. –

+0

Disculpa aceptada. – Tricertops

1

tuve el mismo problema. Necesito hacer que la pantalla se atenúe, pero cuando apago la cámara, el iphone se va a dormir.

- (void)viewWillAppear:(BOOL)animated { 
    [super viewWillAppear:animated]; 
    [[UIApplication sharedApplication] setIdleTimerDisabled:YES]; 
} 

- (void)viewWillDisappear:(BOOL)animated { 
    [super viewWillDisappear:animated]; 
    [[UIApplication sharedApplication] setIdleTimerDisabled:NO]; 
} 

Luego lo llamo después de encender/apagar la cámara, funciona.

[[UIApplication sharedApplication] setIdleTimerDisabled:YES]; 
Cuestiones relacionadas