Nie zasypiaj ekranu podczas mojej aktywności

Mam trzy aktywności w mojej aplikacji. Chcę, aby ekran nie zasnął, gdy jest w drugiej aktywności. Ekran nie powinien zgasnąć w mojej drugiej aktywności, chyba że klawisz "lock" zostanie naciśnięty ręcznie. Przejrzałem wiele linków, ale wydają mi się niejasne.

Author: user838522, 2011-12-09

5 answers

Jak omówiono w samouczku Androida trzymaj ekran włączony , możesz to zrobić na kilka sposobów. Możesz ustawić FLAG_KEEP_SCREEN_ON w oknie aktywności:

getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);

Odpowiednikiem XML jest dodanie atrybutu android:keepScreenOn="true" do głównego widoku układu Twojej aktywności. Zaletą programowego ustawiania flagi jest to, że można użyć

getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);

Gdy nie musisz już wymuszać, aby ekran pozostawał włączony podczas aktywności.

Inny sposób kontroli ekran (i niektóre inne zasoby) ma używać blokady budzenia:

mWakeLock = ((PowerManager) getContext().getSystemService(Context.POWER_SERVICE))
    .newWakeLock(PowerManager.SCREEN_BRIGHT_WAKE_LOCK, getClass().getName());
mWakeLock.acquire();
// screen stays on in this section
mWakeLock.release();

Manifest będzie musiał zawierać to pozwolenie:

<uses-permission android:name="android.permission.WAKE_LOCK"/>

Jednak, jak opisano w samouczku, blokada budzenia jest bardziej odpowiednia dla innych przypadków użycia(takich jak usługa lub zadanie w tle wymagające działania procesora, gdy ekran jest wyłączony).

 131
Author: Ted Hopp,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-06-20 13:16:46

Uważam to rozwiązanie za dużo łatwiejsze:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" // Whatever your layout is
    ...
    android:keepScreenOn="true"> // Add this line

Po prostu dodaj to do układu aktywności XML.

 40
Author: Liam George Betsworth,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-08-01 12:28:50

Jak rozumiem twoje pytanie, myślę, że musisz użyć WAKE_LOCK do tego w swojej aplikacji.

Coś w rodzaju,

final PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
mWakeLock = pm.newWakeLock(PowerManager.SCREEN_BRIGHT_WAKE_LOCK | PowerManager.ON_AFTER_RELEASE,"");    
mWakeLock.acquire();
I w manifeście Twojego podania.XML file file add this,
<uses-permission android:name="android.permission.WAKE_LOCK" />
 6
Author: user370305,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-12-09 07:06:36

Spróbuj użyć tego

getWindow().addFlags(
                        WindowManager.LayoutParams.FLAG_FULLSCREEN
                                | WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
 1
Author: bindal,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-12-09 07:07:31

Ten kod jest przestarzały, użyj tego zamiast:

PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
wl = pm.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK, "My Tag");
wl.acquire();

Po zakończeniu użycia, call (najlepszym rozwiązaniem jest wywołanie tej metody w metodzie onDestroy jakiejś aktywności):

wl.release();

Więcej o tym na tym linku

 1
Author: PetarT,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-02-04 10:03:18