2010-02-08 10 views
9

Ho un'applicazione che richiede che lo schermo dell'iPhone rimanga attivo (o meno, a seconda della scelta dell'utente). Ho fatto ciò disabilitando il timer di inattività dell'applicazione, che funziona bene e dandy fino a quando non inizierò a riprodurre contenuti multimediali tramite MPMusicPlayerController. A causa di un bug nell'SDK, questo riattiva il timer di inattività senza alcun modo apparente di disattivarlo di nuovo.Come impedire a MPMusicPlayerController di abilitare il blocco dello schermo

mio flusso app è:

  1. App inizia
  2. schermo rimane acceso
  3. < ... il tempo passa ... >
  4. Gioca file audio
  5. calci di idle espresso in
  6. Schermo spento

Ho un file audio vuoto in sottofondo per impedire al telefono di andare a dormire, ma mi piacerebbe davvero mantenere lo schermo sbloccato.

Qualcuno è riuscito a capire una soluzione alternativa per questo?

+0

Avete impostato 'idleTimerDisabled' su' YES'? – kennytm

+0

Sì. L'idleTimerDisabled viene ripristinato su NO quando MPMusicPlayerController si attiva e non è possibile disabilitarlo di nuovo. – tddmonkey

+0

Qualche fortuna con questo problema? Ho provato tutte le soluzioni ma nessuna ha funzionato. –

risposta

0

Dovresti semplicemente spegnere il timer di inattività. Quello che faccio di solito in un viewcontroller che ha bisogno di rimanere 'svegli' è questo:

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

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

Questo farà in modo lo schermo non verrà bloccato a causa di inattività dell'utente.

+0

St3fan, l'ho fatto all'avvio dell'app, verificato dal fatto che il telefono non dorme fino a quando la musica non inizia a suonare. Come ho detto, non appena MPMusicPlayerController si attiva, riattiva il timer di inattività e non è possibile disabilitarlo di nuovo – tddmonkey

1

Ho trovato una soluzione a questo problema. Richiama un metodo che disabilita idleTimer in circa 5 secondi dopo che hai iniziato a riprodurre la musica. È un po 'un trucco, ma è una soluzione.

[[SoundEngine mainEngine] playMusic]; 

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

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

Ho avuto un problema simile e ho trovato una soluzione per questo. La correzione potrebbe funzionare anche per te:

Io chiamo un metodo periodicamente (ogni 10 secondi), che imposta idleTimerDisabled prima su NO, poi su SÌ.

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

Solo l'impostazione su SÌ da sola non risolve il problema. Sembra che la proprietà debba prima cambiare per essere riconosciuta da UIApplication.

Il mio problema è stato che lo schermo continuava a diventare scuro non appena ho cambiato i brani musicali sul lettore iPod tramite il telecomando delle cuffie. La mia ipotesi è che questo è lo stesso problema che stai vivendo.

+0

henning77, grazie per questo !! Sono riuscito a farlo funzionare nella mia nuova app usando il tuo metodo. Molte persone hanno frainteso la domanda/problema come un modo normale di disabilitare l'idleti. Ma si tratta di DOPO ASCOLTARE il problema di MPMUSICPLAYER. IdleTimerDisabled = NO; è davvero critico. Non funzionerà senza di essa. – GeneCode

Problemi correlati