2010-02-08 13 views
9

Tengo una aplicación que requiere que la pantalla del iPhone permanezca activa (o no, dependiendo de la elección del usuario). Lo he hecho desactivando el temporizador de inactividad de la aplicación, que funciona bien y dandy hasta que empiece a reproducir medios a través del MPMusicPlayerController. Debido a un error en el SDK, esto reactiva el temporizador inactivo sin forma aparente de desactivarlo nuevamente.Cómo detener MPMusicPlayerController para habilitar el bloqueo de pantalla

Mi flujo de aplicación es:

  1. aplicación se inicia
  2. pantalla se queda en
  3. < ... el tiempo pasa ... >
  4. reproducir el archivo de audio
  5. patadas temporizador de inactividad en
  6. La pantalla se apaga

Tengo un archivo de audio vacío que se reproduce en segundo plano para evitar que el teléfono entre en modo de suspensión profunda, pero realmente me gustaría mantener la pantalla desbloqueada también.

¿Alguien ha logrado encontrar una solución para esto?

+0

¿Ha establecido el 'idleTimerDisabled' en' SÍ'? – kennytm

+0

Sí. El idleTimerDisabled se restablece a NO cuando se inicia el MPMusicPlayerController y no puede volver a desactivarlo. – tddmonkey

+0

¿Alguna suerte con este problema? Intenté todas las soluciones, pero ninguna de ellas funcionó. –

Respuesta

0

Simplemente debe apagar el temporizador de inactividad. Lo que suele hacer en un viewcontroller que necesita para mantenerse 'despierto' es la siguiente:

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

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

Esto hará que la pantalla no quede bloqueado debido a la inactividad del usuario.

+0

St3fan, lo hice al inicio de la aplicación, verificado por el hecho de que el teléfono no duerme hasta que la música comienza a reproducirse. Como dije, tan pronto como el MPMusicPlayerController se active, puede reactivar el temporizador inactivo y no puede volver a desactivarlo – tddmonkey

1

Encontré una solución a este problema. Invoca un método que deshabilita el temporizador inactivo en aproximadamente 5 segundos después de comenzar a reproducir la música. Es un truco, pero es una solución.

[[SoundEngine mainEngine] playMusic]; 

[self performSelector:@selector(setIdleTimeDisabled) withObject:nil afterDelay:5.0]; 

- (void) setIdleTimeDisabled { 
[UIApplication sharedApplication].idleTimerDisabled = YES; 
NSLog(@"Setting idleTimer to TRUE");} 
5

Tuve un problema similar y encontré una solución. La solución podría funcionar para usted también:

Llamo periódicamente a un método (cada 10 segundos), que establece idleTimerDisabled primero en NO, luego en YES.

- (void)calledEveryTenSeconds 
{ 
    [UIApplication sharedApplication].idleTimerDisabled = NO; 
    [UIApplication sharedApplication].idleTimerDisabled = YES; 
} 

Solo el ajuste a SÍ solo no soluciona el problema. Parece que la propiedad tiene que cambiar primero para ser reconocida por UIApplication.

Mi problema era que la pantalla se oscurecía en cuanto cambiaba las pistas de música en el reproductor de iPod a través del control remoto de los auriculares. Supongo que este es el mismo problema que estás experimentando.

+0

henning77, ¡gracias por esto! Me las arreglé para que funcione en mi nueva aplicación usando su método. Muchas personas malinterpretaron la pregunta/problema como una forma normal de desactivar el idletimer. Pero se trata de DESPUÉS DE JUGAR problema MPMUSICPLAYER. El idleTimerDisabled = NO; es de hecho critico. No funcionará sin eso. – GeneCode

Cuestiones relacionadas