2012-02-29 25 views
12

Mam funkcję w mojej aplikacji (aplikacja metronomu dla muzyków), aby przyciemnić ekran, aby zaoszczędzić na żywotności baterii. Aby ustawić jasność, używam:Nie można przywrócić jasności przy wyjściu z aplikacji

[UIScreen mainScreen].brightness = 0.1; 

jestem zapisywania oryginalną jasność na uruchomienie aplikacji w viewDidLoad (...) i że do zapisywania moich ustawień domyślnych użytkownika.

Przy wymianie poglądów w ramach aplikacji, odzyskać pierwotną jasność z niewykonania użytkownika i przywrócić z rozmowy:

[UIScreen mainScreen].brightness = originalBrightness; 

To działa prawidłowo. Mam komunikaty NSLog (...) pokazujące oryginalną wartość, itd. ... więc mechanizm działa.

Problem, który mam, polega na przywróceniu pierwotnej jasności po zamknięciu aplikacji po naciśnięciu przycisku Początek.

Dodałem podobny kod do moich metod delegata aplikacji dla:

applicationWillResignActive(...) 
applicationDidEnterBackground(...) 
applicationWillTerminate(...) 

każdy Mają wywołanie metody, aby ustawić jasność ekranu, jak poprzednio w widoku z podobnym NSLog (...) s przedstawiający odzyskana oryginalna jasność ... i wszystko jest w porządku. Włączyłem także debugowanie i nawiązywane są połączenia, aby ustawić jasność ... ale aplikacja wychodzi, a ekran urządzenia wciąż znajduje się na niższym, przyciemnionym poziomie.

Na koniec, jeśli klikniesz przycisk "Zablokuj" u góry, a następnie naciśnij przycisk Strona główna, aby go obudzić ... jasność jest prawidłowa.

Podejrzewam, że jakiekolwiek działanie lub zdarzenie jest wywoływane przez moje wezwanie do ustawienia jasności, gdy aplikacja się kończy, nie przechodzi przez, być może z powodu nieprawidłowego stanu lub podobnego.

Również moja aplikacja jest ustawiony na NIE działają w tle, ustawić w Info.plist jak:

Application does not run in background  YES 

Każda pomoc będzie mile widziane.

Dzięki!

+1

Czy są to prywatne API? Nie widzę właściwości mainWindow lub mainWindows (literówka?) W klasie UIScreen. Masz na myśli mainScreen? – picciano

+0

Tak, literówka z mojej strony. Ja jest "[Główny ekran Wi-Fi] .brightness = val; ' lub [[UIScreen mainScreen] setBrightness: val]; ' – Cal30

+0

Jestem prawie pewien, że nie da się utrzymać trwałości tego ustawienia poza aplikacją. Dokumentacja Apple nie mówi tego wyraźnie, ale widziałem dwie inne aplikacje zmieniające jasność, w tym przypadku. Ktoś [tutaj] (http: // stackoverflow.com/a/7901339/76810) zgadzają się. – SSteve

Odpowiedz

1

iOS pozwala tej aplikacji trochę czasu przed wyjściem. Po ustawieniu jasności możesz spróbować ułamka sekundy przez sleep.

+0

@piccano Próbowałem tego po opublikowaniu tutaj, ale w delegacie bez skutku. Próbowałem: [code] sleep() [/ code] oraz [code] [Thread sleepForTimeInterval:] [/ code], ale bez zmian. – Cal30

0

Jeśli czytasz https://devforums.apple.com/thread/139813 ostrożnie, oznacza to, że zmiany jasności nie są stałe. Oryginalna jasność użytkownika powraca po naciśnięciu przycisku blokady i odblokowaniu go ponownie. Faktycznie, miałem do przywrócenia mojej aplikacji jasność jeśli użytkownik wciśnie przycisk blokady, podczas gdy moja aplikacja jest uruchomiona:

- (void)applicationDidBecomeActive:(UIApplication *)application{ 
    [self setBrightness]; 
} 
0

nie wiele radości z tego. Obejście polega na zresetowaniu jasności w widoku ViewController viewWillDisappear. Nie jest to świetne rozwiązanie, ale jedyne, które znalazłem do tej pory w pracy (zostało to złamane od lat ...)