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?


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

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


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.


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ń.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.