Wymaga to nadania aplikacji dodatkowego pozwolenia i bardzo łatwo jest wprowadzić błędy, w których przypadkowo przytrzymujesz blokadę wybudzania, a tym samym pozostawiasz włączony ekran.
O wiele lepiej jest użyć flagi okna FLAG_KEEP_SCREEN_ON, którą możesz włączyć w oknie swojej aktywności w onCreate()następujący sposób:
Dzięki temu ekran pozostanie włączony, gdy okno będzie na pierwszym planie i tylko wtedy, gdy będzie na pierwszym planie. To znacznie upraszcza ten typowy przypadek użycia, eliminując żonglowanie, które musisz wykonywać, gdy aplikacja przechodzi między stanami.
Czy to uniemożliwia zasypianie urządzenia? Jeśli tak, powszechność funkcji WAKE_LOCK wydaje mi się szokującym błędem!
Michael Cramer
32
Tak, utrzymuje włączony ekran i zapobiega zasypianiu urządzenia.
hackbod
1
Tak, możesz usunąć flagę za pomocą odpowiedniego interfejsu API okna. Nie musisz się martwić o to, że coś zostanie narysowane, framework robi to w razie potrzeby.
hackbod
1
@hakbod: to działałoby, aby utrzymać ekran przy życiu, ale co z ekranem, który śpi, czy obudziłoby go i utrzymałby przy życiu ????
Kavitha
5
@ KC202 możesz użyć WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON, aby spowodować włączenie ekranu po wyświetleniu okna. Często używany z FLAG_DISMISS_KEYGUARD i / lub FLAG_SHOW_WHEN_LOCKED.
hackbod
34
To pytanie ma już świetną odpowiedź od @hackbod!
Odpowiadam na to pytanie dwoma dodatkowymi rozwiązaniami!
1.implementation za pomocąsetKeepScreenOn() in java code
@Overrideprotectedvoid onCreate(Bundle savedInstanceState){super.onCreate(savedInstanceState);// or any View (in case generated programmatically ) View v = getLayoutInflater().inflate(R.layout.driver_home,null);
v.setKeepScreenOn(true);
setContentView(v);}
1. nie ma znaczenia, że keepScreenOnpowinno być na nim używane Main/Root/Parent View, może być używane z każdym child viewbędzie działać Tak samo, jak działaParent view
2. Jedyną rzeczą jest to, że View's Visibility must be visibleinaczej nie zadziała!
uwaga v.setKeepScreenOn(true);wydaje się być jedynym sposobem na zrobienie tego w przypadku pełnoekranowego fragmentu dialogowego
Tim
16
Innym rozwiązaniem jest dodanie android:keepScreenOn="true"( dokumentacji ) do widoków, które muszą mieć włączony ekran.
Pozwala na nieco bardziej szczegółową kontrolę pod względem tego, które widoki pozostają, a które nie. W ten sposób możesz nawet odwołać się do ustawienia z pliku zasobów.
Odpowiedzi:
PROSZĘ NIE UŻYWAĆ BLOKADY WAKE
Wymaga to nadania aplikacji dodatkowego pozwolenia i bardzo łatwo jest wprowadzić błędy, w których przypadkowo przytrzymujesz blokadę wybudzania, a tym samym pozostawiasz włączony ekran.
O wiele lepiej jest użyć flagi okna
FLAG_KEEP_SCREEN_ON
, którą możesz włączyć w oknie swojej aktywności wonCreate()
następujący sposób:Dzięki temu ekran pozostanie włączony, gdy okno będzie na pierwszym planie i tylko wtedy, gdy będzie na pierwszym planie. To znacznie upraszcza ten typowy przypadek użycia, eliminując żonglowanie, które musisz wykonywać, gdy aplikacja przechodzi między stanami.
źródło
To pytanie ma już świetną odpowiedź od @hackbod!
Odpowiadam na to pytanie dwoma dodatkowymi rozwiązaniami!
Istniejące rozwiązanie:
Dodatkowe rozwiązania:
możemy użyć
keepScreenOn
1.
implementation
za pomocąsetKeepScreenOn() in java code
Dokumenty http://developer.android.com/reference/android/view/View.html#setKeepScreenOn(boolean)
2. Dodawanie
keepScreenOn
doxml layout
Dokumenty http://developer.android.com/reference/android/view/View.html#attr_android%3akeepScreenOn
Uwaga (kilka przydatnych punktów):
1. nie ma znaczenia, że
keepScreenOn
powinno być na nim używaneMain/Root/Parent View
, może być używane z każdymchild view
będzie działać Tak samo, jak działaParent view
2. Jedyną rzeczą jest to, że
View's Visibility must be visible
inaczej nie zadziała!źródło
v.setKeepScreenOn(true);
wydaje się być jedynym sposobem na zrobienie tego w przypadku pełnoekranowego fragmentu dialogowegoInnym rozwiązaniem jest dodanie
android:keepScreenOn="true"
( dokumentacji ) do widoków, które muszą mieć włączony ekran.Pozwala na nieco bardziej szczegółową kontrolę pod względem tego, które widoki pozostają, a które nie. W ten sposób możesz nawet odwołać się do ustawienia z pliku zasobów.
źródło