Jak programowo wyłączyć / włączyć tryb uśpienia w iOS?


162

Mam aplikację, która musi czuwać do końca odliczania, ale przejdzie w „tryb uśpienia”, gdy osiągnie wyznaczony czas na sen.

W mojej aplikacji mam opcję odroczenia uśpienia, aby użytkownicy mogli ją wyłączyć / włączyć.

Jak to zrobić programowo?

Odpowiedzi:


379

Licznik czasu bezczynności można wyłączyć w następujący sposób;

W celu C:

[UIApplication sharedApplication].idleTimerDisabled = YES;

W Swift:

UIApplication.sharedApplication().idleTimerDisabled = true

W wersjach Swift 3.0 i Swift 4.0:

UIApplication.shared.isIdleTimerDisabled = true

Ustaw go z powrotem NOlub, falseaby ponownie włączyć tryb uśpienia.

Na przykład, jeśli potrzebujesz go, dopóki nie opuścisz widoku, możesz go przywrócić, nadpisując viewWillDisappear:

override func viewWillDisappear(_ animated: Bool) {
    UIApplication.shared.isIdleTimerDisabled = false
}

Więcej o klasie UIApplication .


@Gati Wątpię, ale nie mogę potwierdzić, ponieważ nie mam zegarka
jrturton

1
@jrturton Hmm .. Nie działa w Apple Watch. Jeśli masz jakieś rozwiązanie, daj mi znać.
iGatiTech

Dzięki za tą informację. Przyda się. Zastanawiałem się, czy wyłączenie trybu uśpienia w jednej aplikacji wpłynie na całe urządzenie. Na przykład, jeśli wyłączę go w mojej aplikacji, a następnie wyjdę z aplikacji, czy nadal będzie wyłączony po zamknięciu aplikacji? Czy muszę sprawdzić, czy jest aktywny, czy nie, a następnie włączyć go ponownie po wyjściu?
Scott Kilbourn,

2
@ScottKilbourn dotyczy tylko Twojej aplikacji. [UIApplication sharedApplication]odnosi się tylko do obiektu UIApplication Twojej aplikacji.
jrturton

22

W Swift 3, aby wyłączyć licznik czasu bezczynności, teraz:

UIApplication.shared.isIdleTimerDisabled = true

Aby z powrotem włączyć licznik czasu bezczynności, wystarczy:

UIApplication.shared.isIdleTimerDisabled = false

Dodatkowo zwróć uwagę, że YESi NOnie są dostępne w Swift i że musisz użyć albo truelub false(w przeciwieństwie do poprzedniej odpowiedzi).


1

iOS 13, Swift 5,5.1+, aby wyłączyć licznik czasu bezczynności. W SceneDelegate.swift.

 func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
     UIApplication.shared.isIdleTimerDisabled = true
 }

-5

w Swift 3 dokładna lokalizacja, w której można to zrobić AppDelegate.swift- należy dodać UIApplication.shared.isIdleTimerDisabled = truewewnątrz applicationfunc, aby wynik wyglądał tak:

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
    UIApplication.shared.isIdleTimerDisabled = true
    return true
}

2
To nie jest zależne od AppDelegate. W rzeczywistości uważałbym za złą praktykę utrzymywanie urządzenia w stanie uśpienia bez żadnego powodu. Pytanie dotyczyło utrzymywania urządzenia w stanie uśpienia podczas określonej funkcjonalności (do końca odliczania). Dlatego należy rozważyć wyłączenie licznika czasu bezczynności, gdy zaczyna się odliczanie, i włączenie go ponownie po zakończeniu odliczania.
Martin,

@Cyrus Nie jestem szybkim programistą. obecnie tworzę aplikację webview i próbowałem wielu rozwiązań bez dokładnych instrukcji i to nie zadziałało, ale TO DZIAŁA. więc publikuję to, aby podzielić się z innymi, którzy będą szukać podobnego rozwiązania. powód używania tego - moja aplikacja jest pomocnikiem gitarowym, który zawsze musi
budzić się
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.