Jak zapobiec programowemu zasypianiu urządzenia z systemem Android?
Jedną z opcji jest użycie blokady wybudzania . Przykład z dokumentów:
PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK, "My Tag");
wl.acquire();
// screen and CPU will stay awake during this section
wl.release();
Na tej stronie znajduje się również tabela opisująca różne rodzaje wakelocków.
Należy pamiętać, że podczas korzystania z blokady wybudzania należy zachować ostrożność. Upewnij się, że zawsze release()
blokujesz, gdy skończysz z tym (lub nie na pierwszym planie). W przeciwnym razie Twoja aplikacja może potencjalnie spowodować poważne wyczerpanie baterii i zużycie procesora.
Dokumentacja zawiera również przydatną stronę, która opisuje różne podejścia do utrzymywania urządzenia w stanie czuwania i kiedy możesz go użyć. Jeśli „zapobieganie uśpieniu urządzenia” odnosi się tylko do ekranu (bez utrzymywania aktywnego procesora), wówczas blokada wybudzania jest prawdopodobnie większa niż potrzeba.
Musisz również upewnić się, że masz uprawnienie WAKE_LOCK ustawione w swoim manifeście, aby użyć tej metody.
Jeśli chcesz tylko zapobiec trybowi uśpienia na określonym
View
, po prostu wywołajsetKeepScreenOn(true)
toView
lub ustawkeepScreenOn
właściwość natrue
. Zapobiegnie to wygaszaniu ekranu, gdyView
jest na ekranie. Nie jest do tego wymagane specjalne pozwolenie.źródło
setKeepScreenOn(true)
zadziała tylko wtedy, gdyView
jest widoczny.Znalazłem inne działające rozwiązanie: dodaj następujący wiersz do swojej aplikacji pod zdarzeniem onCreate.
Mój przykładowy projekt Cordova wygląda następująco:
Po tym czasie moja aplikacja nie zasypiała, gdy była otwarta. Dzięki za odpowiedź kierujemy się do xSus.
źródło
android:keepScreenOn="true"
może być lepszą opcją z XML układu.Więcej informacji: https://developer.android.com/training/scheduling/wakelock.html
źródło
Ustaw flagi w oknie działania, jak poniżej
źródło
Z poziomu powłoki głównej (np. Powłoki adb) możesz zablokować za pomocą:
Po czym urządzenie pozostanie w stanie uśpienia, dopóki:
Z tym samym ciągiem znaków dla „mylockname”.
Pamiętaj, że nie zapobiegnie to czarnemu ekranowi, ale zapobiegnie spaniu procesora.
Zauważ, że / sys / power / wake_lock jest do odczytu i zapisu dla radia użytkownika (1001) i systemu grupowego (1000) i oczywiście roota.
Odniesienie jest tutaj: http://lwn.net/Articles/479841/
źródło
to, co powiedział @eldarerathis, jest poprawne we wszystkich aspektach, blokada wybudzenia to właściwy sposób na zabezpieczenie urządzenia przed zasypianiem.
Nie wiem, co musi zrobić aplikacja, ale naprawdę ważne jest , aby zastanowić się, jak zaprojektować swoją aplikację, aby nie zmuszać telefonu do czuwania dłużej, niż potrzebujesz, w przeciwnym razie żywotność baterii ogromnie ucierpi.
Chciałbym wskazać ten naprawdę dobry przykład, jak używać
AlarmManager
do wywoływania zdarzeń i wybudzania telefonu i (Twojej aplikacji), aby wykonać to, co musisz zrobić, a następnie ponownie iść spać: Menedżer alarmów (źródło: commonsware.com)źródło
Jeśli jesteś użytkownikiem platformy Xamarin, oto rozwiązanie:
źródło