2010-02-08 6 views
9

Ich habe eine Anwendung, die erfordert, dass der iPhone-Bildschirm aktiv bleibt (oder nicht, je nach Benutzerwahl). Ich habe dies getan, indem ich den Anwendungs-Leerlauf-Timer deaktiviert habe, was gut und gut funktioniert, bis ich anfange, Medien über den MPMusicPlayerController abzuspielen. Aufgrund eines Fehlers im SDK wird der Leerlauftimer dann wieder aktiviert, ohne dass er wieder deaktiviert werden kann.Wie man MPMusicPlayerController daran hindert, die Bildschirmsperre zu aktivieren

Meine app Fluss:

  1. App startet
  2. Bildschirm auf
  3. bleibt
  4. < ... die Zeit vergeht ... >
  5. Audio-Datei abspielen
  6. Idle Timer Tritte in
  7. Bildschirm wird ausgeschaltet

Ich habe eine leere Audiodatei im Hintergrund, um zu verhindern, dass das Telefon in den Tiefschlaf geht, aber ich würde den Bildschirm gerne auch entsperrt lassen.

Hat es jemand geschafft, einen Workaround dafür zu finden?

+0

Haben Sie 'idleTimerDisabled' auf' YES' gesetzt? – kennytm

+0

Ja. Das idleTimerDisabled wird auf NO zurückgesetzt, wenn MPMusicPlayerController aktiviert wird und Sie es nicht erneut deaktivieren können. – tddmonkey

+0

Haben Sie Glück mit diesem Problem? Versuchte alle Lösungen, aber keine funktionierte. –

Antwort

0

Sie sollten einfach den Leerlauf-Timer ausschalten. Was ich in der Regel in einem Viewcontroller tun, die ‚wach‘ bleiben muss, ist dies:

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

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

Dies wird der Bildschirm stellen Sie sicher, nicht aufgrund von Inaktivität Benutzer gesperrt bekommen.

+0

St3fan, ich habe dies auf App Start getan, verifiziert durch die Tatsache, dass das Telefon nicht schlafen, bis Musik zu spielen beginnt. Wie ich bereits erwähnt habe, sobald der MPMusicPlayerController aktiviert wird, aktiviert er wieder den Leerlauf-Timer und du kannst ihn nicht wieder deaktivieren – tddmonkey

1

Ich habe eine Lösung für dieses Problem gefunden. Rufen Sie eine Methode auf, die den idleTimer in etwa 5 Sekunden deaktiviert, nachdem Sie mit dem Abspielen der Musik begonnen haben. Es ist ein bisschen wie ein Hack, aber es ist ein Workaround.

[[SoundEngine mainEngine] playMusic]; 

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

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

Ich hatte ein ähnliches Problem und fand eine Lösung dafür. Der Fix könnte auch für Sie funktionieren:

Ich rufe regelmäßig eine Methode auf (alle 10 Sekunden), die idleTimerDisabled zuerst auf NO und dann auf YES setzt.

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

Nur die Einstellung auf YES alleine behebt das Problem nicht. Es scheint, dass die Eigenschaft geändert werden muss, um von UIApplication erkannt zu werden.

Mein Problem war, dass der Bildschirm dunkel wurde, sobald ich Musiktitel auf dem iPod-Player über die Kopfhörer-Fernbedienung wechselte. Meine Vermutung ist, dass dies das gleiche Problem ist, wie Sie es erleben.

+0

henning77, danke dafür !! Ich habe es mit meiner Methode in meiner neuen App zum Laufen gebracht. Viele Leute haben die Frage/Problem als einen normalen Weg missverstanden wie Idletimer zu deaktivieren. Aber es geht um NACH DEM SPIELEN MPMUSICPLAYER Problem. Das idleTimerDisabled = NO; ist in der Tat kritisch. Es funktioniert nicht ohne es. – GeneCode