2013-04-10 28 views
3

我有一個應用程序,如果它有前景,可以從硬件附件接收定期更新。該硬件附件上有一個物理硬件按鈕。用戶認爲這是「與設備的交互」(在這種情況下爲iPhone或iPad touch),我希望通過這些硬件按鈕來重置UIApplication內的計數器或計時器機制,以便在用戶不立即進入睡眠狀態正在積極使用該應用程序。是否有替代iOS設置UIApplication idleTimerDisabled來簡單地表示用戶已經積極做了些什麼?

我如何做到這一點?目前,我只能完全禁用定時器,然後從一些內部輔助定時器重新啓用定時器。所有這些計時器的計時器似乎都很愚蠢。

我正在尋找一種方法像 [UIApplication userDidSomethingSoPleaseDontGoToSleepYouSillyThing];

現在,如果我的應用程序關閉空閒計時器,然後忘記重新啓用它,用戶的設備將只把電池耗盡而關機。這對電池壽命測試很有用,但可能會讓最終用戶感到不安。我寧願不要觸摸這個idleTimerDisabled,直接告訴應用程序至少保持清醒一段時間,然後如果用戶再次按下按鈕,則告訴UIApplication重新設置其內部定時器。

+0

答:沒有沒有。只需創建一個「NSTimer」,禁用,然後在NSTimer啓動時重新啓用(一次或多次,您決定)。 – 2013-04-20 22:16:57

回答

0

也許我不明白你......但

/* Block idleTimer */ 
application.idleTimerDisabled = YES; 

/* DO ALL YOUR STUFF */ 
/* AND IF SOMETHING APPEN */ 

/* Restore idleTimer */ 
application.idleTimerDisabled = NO; 
+0

這正是我想避免的,因爲它就像是一個關鍵部分。如果您不能退出此模式,請關閉電池。我希望有一個系統-API說:「讓屏幕避光60秒,如果你碰巧沒有再聽到我的消息,不要去殺死用戶的電池」。但沒有。所以你已經指出了什麼是顯而易見的。不過謝謝。我正在做你的建議(見上面我的評論),這是我嘗試的第一個明顯的想法,但我想要更好的東西。 – 2013-04-23 15:14:14

+0

對不起,我不明白你需要什麼。 – 2013-05-02 10:20:19

+0

您可以嘗試創建一個在另一個線程中定期調用的「空閒定時器禁用操作」。 如果此操作符合所有要求,您可以重新激活空閒計時器,否則保持空閒計時器禁用並等待另一個此功能的呼叫。 – 2013-05-02 10:29:00

0

也許嘗試以下重置空閒計時器:

[UIApplication sharedApplication].idleTimerDisabled = YES; 
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ 
    [UIApplication sharedApplication].idleTimerDisabled = NO; 
}); 

其中0.5是0.5秒。請注意,我沒有自己嘗試此代碼。我不確定是否有(m)gcd塊不會執行的任何條件。

相關問題