Jak mogę zapobiec przyciemnianiu lub wyłączaniu ekranu iPhone'a, gdy moja aplikacja jest uruchomiona?

114

Pracuję nad aplikacją, która nie wymaga wprowadzania danych przez użytkownika, ale nie chcę, aby iPhone przechodził w tryb oszczędzania energii.

Czy można wyłączyć oszczędzanie energii w aplikacji?

lajos
źródło
7
O co chodzi z głosami przeciw wszystkich ostatnich pytań? Wydaje mi się, że to ważne pytanie.
Eric Schoonover,

Odpowiedzi:

172

Cel C

[[UIApplication sharedApplication] setIdleTimerDisabled:YES];

Szybki

UIApplication.shared.isIdleTimerDisabled = true
lajos
źródło
2
Czy ma znaczenie, gdzie ten wiersz kodu jest używany? Czy powinien znajdować się w AppDelegate, czy w głównym kontrolerze widoku aplikacji?
16
To zależy od tego, jak zamierzasz go używać. Możesz mieć tylko jeden widok, którego nie chcesz przekraczać w swojej aplikacji. W takim przypadku użyjesz go w tym kontrolerze widoku (gdy pojawi się widok). Aby ponownie włączyć licznik czasu, którego będziesz używać, [[UIApplication sharedApplication] setIdleTimerDisabled:NO];gdy widok zniknie.
Liam George Betsworth
2
Czy aplikacja musi ponownie włączyć licznik czasu, gdy straciła aktywność, czy jest to obsługiwane automatycznie przez system operacyjny?
Stan James
5
Stan - gdy aplikacja wyłączy się, system operacyjny ponownie włączy tryb bezczynności, nie musisz dzwonić[[UIApplication sharedApplication] setIdleTimerDisabled:NO];
Chris Stringer
IMHO to nie ma znaczenia, skąd to nazywasz. Jest to zawsze trafienie całej aplikacji, a każdy widok jest trzymany na ekranie, a nie przyciemniony.
dekady
20

W szybkich można wykorzystać jako

UIApplication.sharedApplication().idleTimerDisabled = true
Vettiyanakan
źródło
12

Swift 3:

UIApplication.shared.isIdleTimerDisabled = true
Charlie Seligman
źródło
Pozostaje to samo dla Swift 4
Branson Camp
2

Umieściłem tę linię kodu w moim kontrolerze widoku, ale klienci wciąż mówią, że ekran zostanie przyciemniony lub wyłączony, dopóki ktoś nie dotknie ekranu. Widziałem inne posty, w których nie tylko ustawiasz programowo

UIApplication.sharedApplication().idleTimerDisabled = true 

na true, ale najpierw musisz zresetować ją na false

UIApplication.sharedApplication().idleTimerDisabled = false
UIApplication.sharedApplication().idleTimerDisabled = true

Niestety to nadal nie działało, a klienci wciąż otrzymują przyciemnione ekrany. Mamy profil Apple Configurator zapobiegający zasypianiu urządzenia, a mimo to ekran niektórych urządzeń gaśnie, a klient musi nacisnąć przycisk home, aby wybudzić ekran. Teraz umieściłem ten kod w zegarze, który odpala co 2,5 godziny, aby zresetować licznik czasu bezczynności, mam nadzieję, że to zadziała.

JMStudios.jrichardson
źródło
1
Niestety, umieszczenie kodu w funkcji uruchamiającej się zgodnie z zegarem nie rozwiązało problemu. Zostawiłem iPada włączonego na ponad 24 godziny i nie zgaśnie i nie ma interakcji. Według jednego z naszych klientów użytkownik korzystał z urządzenia 15 minut wcześniej, po czym urządzenie zgasło.
JMStudios.jrichardson
Mam ten sam problem: mam kontroler widoku, w którym ustawiam idelTimerDisabled = true (aplikacja ma pozostać otwarta przez całą noc, budzik) i przez większość czasu działa, ale czasami aplikacja działa w tle gdzieś w nocy. Czy ktoś ma pomysł, co mogłoby przenieść aplikację na drugi plan? lub zresetować flagę?
Yariv Adam
Tak, możesz zresetować flagę i ja też to robiłem. Miałem to również w funkcji. Okazuje się, że był to „proces rouge” na naszym serwerze MDM wysyłający pingi do naszych urządzeń w celu przyciemnienia ekranów. bardzo irytujące.
JMStudios.jrichardson
0

Mieliśmy ten sam problem. Okazało się, że jest to nieuczciwy proces na naszym serwerze MDM, który został usunięty z naszego konta, ale na serwerze nadal wysyłał polecenie przyciemnienia naszych urządzeń.

JMStudios.jrichardson
źródło