iOSでプログラム的にスリープモードを無効/有効にする方法は?


162

カウントダウンが終了するまで起きている必要があるアプリがありますが、割り当てられたスリープ時間に達すると「スリープモード」になります。

私のアプリでは、ユーザーがスリープを無効または有効にできるように、スリープを延期するオプションがあります。

プログラムでそれをどのように行うのですか?

回答:


379

次のようにアイドルタイマーを無効にできます。

Objective-Cの場合:

[UIApplication sharedApplication].idleTimerDisabled = YES;

Swiftの場合:

UIApplication.sharedApplication().idleTimerDisabled = true

Swift 3.0およびSwift 4.0の場合:

UIApplication.shared.isIdleTimerDisabled = true

スリープモードに戻すNOfalse、スリープモードを再度有効にします。

たとえば、ビューを終了するまで必要な場合は、viewWillDisappearをオーバーライドすることで設定を戻すことができます。

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

UIApplicationクラスの詳細。


@Gati疑わしいが、時計を持っていないので確認できない
jrturton

1
@jrturtonうーん。アップルウォッチでは動作しません。これに対する解決策がある場合は、お知らせください。
iGatiTech 2015年

この情報をありがとう。重宝します。1つのアプリでスリープモードを無効にすると、デバイス全体に影響があるのか​​と思いました。アプリで無効にしてアプリを終了した場合と同様に、アプリを終了した後も無効になりますか?それがアクティブかどうかを確認してから、途中で再び有効にする必要がありますか?
スコットキルボーン2015

2
@ScottKilbournはアプリにのみ影響します。アプリのUIApplicationオブジェクトのみを[UIApplication sharedApplication]参照します
jrturton 2015

22

Swift 3では、アイドルタイマーを無効にするには次のようにします。

UIApplication.shared.isIdleTimerDisabled = true

アイドルタイマーをオンに戻すには、次のようにします。

UIApplication.shared.isIdleTimerDisabled = false

さらに、YESおよびNOはSwiftでは使用できず、trueまたはfalse(前の回答とは対照的に)またはのいずれかを使用する必要があることに注意してください。


1

アイドルタイマーを無効にするiOS 13、Swift 5,5.1以降。でSceneDelegate.swift

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

-5

Swift 3では、これを実行できる正確な場所は-func 内にAppDelegate.swift追加する必要があるため、結果は次のようになります。UIApplication.shared.isIdleTimerDisabled = trueapplication

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

2
これはAppDelegateに依存していません。実際、私は何の理由もなくデバイスを起動させておくことは悪い習慣だと思います。問題は、特定の機能が実行されている間(カウントダウンが終了するまで)、デバイスをスリープ状態にしないことです。したがって、カウントダウンの開始時にアイドルタイマーを無効にし、カウントダウンの終了後に再び有効にすることを検討する必要があります。
マーティン

@Cyrus私は迅速なプログラマではありません。現在、私はwebviewアプリを作成しており、正確な指示なしに多くの解決策を試しましたが、それは私にとってはうまくいきませんでしたが、これはうまくいきました。これを投稿して、同様の解決策を探している他の人と共有します。これを使用する理由-私のアプリは、演奏中に常に目を
覚ます
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.