2010-02-08 3 views
9

J'ai une application qui nécessite l'écran de l'iPhone pour rester actif (ou non, selon le choix de l'utilisateur). Je l'ai fait en désactivant la minuterie d'inactivité de l'application, qui fonctionne bien et dandy jusqu'à ce que je commence à jouer des médias via le MPMusicPlayerController. En raison d'un bug dans le SDK, cela réactive le minuteur inactif sans moyen apparent de le désactiver à nouveau.Comment arrêter MPMusicPlayerController d'activer le verrouillage de l'écran

Mon flux d'application est:

  1. App commence
  2. L'écran reste sur
  3. < ... le temps passe ... >
  4. Lire le fichier audio
  5. coups de pied au ralenti dans la minuterie
  6. L'écran s'éteint

J'ai un fichier audio vide en arrière-plan pour empêcher le téléphone de s'endormir, mais j'aimerais vraiment que l'écran reste déverrouillé.

Quelqu'un at-il réussi à trouver une solution de contournement pour cela?

+0

Avez-vous défini 'idleTimerDisabled' sur 'YES'? – kennytm

+0

Oui. IdleTimerDisabled est réinitialisé sur NO lorsque MPMusicPlayerController démarre et que vous ne pouvez plus le désactiver. – tddmonkey

+0

Une chance avec ce problème? J'ai essayé toutes les solutions mais aucune d'entre elles n'a fonctionné. –

Répondre

0

Vous devez simplement désactiver le temporisateur de ralenti. Ce que je fais habituellement dans un viewcontroller qui doit rester « éveillé » est la suivante:

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

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

Cela fera que l'écran ne sera pas verrouillé en raison de l'inactivité de l'utilisateur.

+0

St3fan, j'ai fait cela au démarrage de l'application, vérifié par le fait que le téléphone ne dort pas jusqu'à ce que la musique commence à jouer. Comme je l'ai dit, dès que le MPMusicPlayerController est activé, il réactive le minuteur inactif et vous ne pouvez plus le désactiver – tddmonkey

1

J'ai trouvé une solution à ce problème. Appelez une méthode qui désactive idleTimer dans environ 5 secondes après le début de la lecture de la musique. C'est un peu un hack, mais c'est une solution de contournement.

[[SoundEngine mainEngine] playMusic]; 

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

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

J'ai eu un problème similaire, et a trouvé une solution pour elle. Le correctif peut également fonctionner pour vous:

J'appelle une méthode périodiquement (toutes les 10 secondes), ce qui définit d'abord idleTimerDisabled sur NO, puis sur YES. Seul le réglage sur YES seul ne résout pas le problème. Il semble que la propriété doit d'abord changer pour être reconnue par UIApplication. Mon problème était que l'écran devenait sombre lorsque je changeais de pistes musicales sur le lecteur iPod via la télécommande du casque. Je suppose que c'est le même problème que vous rencontrez.

+0

henning77, merci !! J'ai réussi à le faire fonctionner dans ma nouvelle application en utilisant votre méthode. Beaucoup de gens ont mal compris la question/le problème comme une façon normale de désactiver idletimer. Mais il s'agit de problème APRÈS PLAYING MPMUSICPLAYER. IdleTimerDisabled = NO; est en effet critique. Cela ne fonctionnera pas sans cela. – GeneCode

Questions connexes