2009-06-29 14 views
14

Użyłem:nie idleTimerDisabled działa od iPhone 3.0

[UIApplication sharedApplication].idleTimerDisabled = YES; 

w szeregu Apps opracowany i uruchomiony w iPhone OS 2.x i nigdy nie miałem żadnych problemów z nim. Były to aplikacje z zegarem, potrzebne do ciągłego działania i ignorowania ustawienia bezczynności zegara iPhone'a.

Jednak próbując osiągnąć to samo z nową aplikacją z systemem operacyjnym 3.0 (która musi być wdrożona w wersji 3.0, ponieważ korzysta z niektórych interfejsów API 3.0), stwierdziłem, że bezczynny licznik czasu jest ignorowany lub niespójny.

Moja aplikacja odtwarza muzykę z biblioteki iPoda, a gdy odtwarzana jest muzyka, blokuje się automatycznie, bez względu na powyższe ustawienie. Jednak po odblokowaniu nie następuje automatyczne blokowanie, chyba że ponownie odtwarzasz muzykę, w takim przypadku blokuje się ponownie po ustawieniu czasu automatycznego blokowania iPhone'a.

Jestem zaskoczony, że nikt inny nie natknął się na to, ponieważ wyobrażam sobie, że wpłynie to na dużą liczbę aplikacji.

prostu do wyjaśnienia:
1. Powyższy kod jest ApplicationDidFinishLaunching
2. Wiem, że telefon nie będzie auto-lock podczas testowania z Xcode niezależnie od ustawień

Jeśli ktoś ma jakieś myślach "Byłbym bardzo wdzięczny ...

+0

Czy korzystasz z sesji audio podczas grania muzyki? Myślę, że w jakiś sposób być może właściwość idleTimerDisabled jest resetowana w jakiś sposób, gdy zaczynasz odtwarzanie muzyki ... Być może twoja poprawka jest tak prosta, jak wstawienie innego idleTimerDisabled = YES w twoim kodzie zaraz po rozpoczęciu odtwarzania muzyki. –

+0

Dzięki ... Tak - próbowałem tego, myśląc tak samo. Nie robiło to różnicy. Pozdrawiam. – Craig

+0

"Wiem, że telefon nie będzie blokował się automatycznie podczas testowania z xCode, niezależnie od ustawień" - dziękuję! Nie zdawałem sobie z tego sprawy i nie mogłem zrozumieć, dlaczego moja aplikacja nie zezwala na automatyczne blokowanie telefonu. – filipe

Odpowiedz

16

Nasza aplikacja korzysta z MPMediaPLayer. Mieliśmy również kod idleTimerDisabled=YES w urządzeniu ApplicationFinishedLaunching, który działa WYŁĄCZNIE, jeśli jest niepodłączony, i istnieje już bieżący nowPlayingItem, który jest odtwarzany (lub wstrzymany, jeśli został zatrzymany przy starcie aplikacji). Oczywiście jest to wszystko z zestawem Settings -> General -> Autolock ustawionym na pewną wartość czasową.

Po dodaniu idleTimerDisabled=NO, po której następuje idleTimerDisabled=YES w jednym z pozostałych fragmentów kodu AFTER, dowiedzieliśmy się, jaka część muzyki, którą gramy, wydawała się rozwiązać problem. Ustawienie go na YES było niewystarczające ... a kolejne zapytania zawsze wskazywały poprawną wartość (YES) .. więc wygląda na to, że kod Apple ignoruje ustawienie wartości JEŻELI jest aktualny utwór muzyczny i to nie jest zmieniane przez twoje kod ... ale zauważy zmianę wartości.

Wszystko to pod numerem iOS 3.0.

+0

Cześć Neil - dzięki za to. Właśnie znalazłem poprawkę na tych samych zasadach. Jeśli ustawisz timer co 30 sekund, aby ustawić idleTimerDisabled na NIE, a następnie YES, pozostanie on włączony bez względu na ustawienia odtwarzania muzyki. To trochę hack, ale działa! – Craig

+0

Znalazłem to samo zachowanie w iOS 3, a powyższe rozwiązanie działało dla mnie. Ponieważ mam uruchamianie i zatrzymywanie dźwięku w mojej aplikacji, co zakłóca ustawienie mojego bezczynności, ustawiam timer i za każdym razem, gdy działa, sprawdziłem stan aplikacji i albo wyłączyłem funkcję idleTimer, a następnie ponownie, jeśli chcę, aby było włączone. lub wyłączyłem go, gdybym tego nie zrobił. Ale pod iOS 4, stwierdziłem, że wyłączenie idleTimer w tej pętli sprawia, że ​​urządzenie nie przechodzi w tryb bezczynności! Musiałem więc dostosować mój kod, aby wyłączyć timer bezczynności tylko raz, a nie za każdym razem, gdy przechodzę przez pętlę. – arlomedia

0

Brzmi jak błąd, plik z Radarem - nie jestem zbyt zaskoczony, że nie widziałem tak wiele, ponieważ prawdopodobnie nie ma wiele aplikacji, które próbują zablokować ekran otwarty i odtwarzać muzykę.

+0

Tak, myślę, że to prawdopodobnie błąd - zagram to ... Dzięki. – Craig

0

Posiadanie tego samego problemu. To działa, gdy urządzenie jest podłączone. Możesz nacisnąć przycisk blokady na górze, a mój NSTimer odpali później i wywoła wibracje. Jeśli jednak urządzenie nie jest podłączone, naciśnięcie przycisku blokady powoduje uśpienie urządzenia. Każde rozwiązanie byłoby bardzo docenione.

  • Na iCodeblog napisałem o idletimer, powiedziałem, że to nie działa, a osoba, która rozwija "ładny zegar" była na tyle miła, aby odpowiedzieć. Musisz zrobić hack, odtwarzać 1 sekundę lub dłużej cichy dźwięk co 10 sekund dzięki NSTimer. Dzięki temu urządzenie nie śpi, nawet jeśli użytkownik kliknie przycisk blokady.
+1

Witaj - Nie zapomnij, że urządzenie nie przejdzie w stan uśpienia po podłączeniu do XCode - nie oznacza to, że działa polecenie idleTimer. Jednak wydaje się, że nie ma jeszcze rozwiązania. – Craig

0

Rozwijam Seconds - Interval Timer for iPhone and iPod touch i nie miałem z tym problemów.Ideą mojej aplikacji jest to, że ludzie tworzą timery w oparciu o pewną liczbę interwałów, w których każdy interwał może mieć własną listę odtwarzania lub utwór.

W systemie iOS3 wystąpił problem polegający na tym, że nie można wyłączyć licznika czasu bezczynnego, ustawiając ustawienie idleTimerDisabled = YES. W końcu wymyśliłem to samo rozwiązanie, co Neil, przy czym okresowo ustawiałem to na NIE, a następnie natychmiast na TAK. To wydawało się działać.

Aktualizuję aplikację na iOS4 (wiem, iOS5 jest tuż za rogiem ...), a teraz mam przeciwny problem. Jeśli MPMediaPlayer zmieni ścieżkę zanim licznik czasu bezczynności osiągnie swój limit, zostanie zresetowany. Właśnie to przetestowałem, tworząc interwał w mojej aplikacji, który wynosił 55 sekund, mój automatyczny blokada została ustawiona na minutę. Po 50 sekundach ekran przygasł, gdy przygotowywał się do zablokowania, ale w 55 sekund po zmianie muzyki wrócił do pełnej jasności, a następnie nie zablokował się tak, jak powinien.

Ogólnie rzecz biorąc, wykonanie tego wydaje się w najlepszym przypadku flakey.

3

Nawet w 2015 roku, przy użyciu iOS 8.2, ten błąd jest wciąż żywy i kopie.

Oto moje rozwiązanie, używając XCode 6.2.

iPhone - phone goes to sleep even if idleTimerDisabled is YES

Zasadniczo, nawet teraz, w 2015 roku, jedynym sposobem, aby bezpiecznie upewnić się, że urządzenie nie iść spać jest wielokrotnie nazwać kawałek kodu, aby trzymać urządzenie jawie.

-(void)callEveryTwentySeconds 
{ 
    // DON'T let the device go to sleep during our sync 
    [[UIApplication sharedApplication] setIdleTimerDisabled:NO]; 
    [[UIApplication sharedApplication] setIdleTimerDisabled:YES]; 
} 
Powiązane problemy