C'è un modo per disabilitare lo screensaver mentre la mia app è in esecuzione?
L'oscuramento dello schermo è ciò che intendo.
C'è un modo per disabilitare lo screensaver mentre la mia app è in esecuzione?
L'oscuramento dello schermo è ciò che intendo.
Risposte:
Vuoi usare qualcosa del genere:
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
Ero solito:
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
per disabilitare il timeout dello schermo e
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
per riattivarlo.
C'è anche un modo XML che Google consiglia:
<LinearLayout
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:keepScreenOn="true">
Controlla Presentazioni Google - Diapositiva 16.
"I wakelock sono costosi se dimenticati (...) Considera l'utilizzo di android: keepScreenOn per garantire la correttezza"
PowerManager.newWakeLocke getWindow().addFlagsnon ha funzionato per qualche motivo, questo ha funzionato.
È importante notare che questi metodi devono essere tutti eseguiti dal thread dell'interfaccia utente per funzionare. Vedere la modifica di KeepScreenOn da javascript nell'app Android Cordova
Aggiungi semplicemente la riga sotto nella tua MainActivitye la tua app non spegne mai le luci.
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
In una vista, nel mio caso una sottoclasse di SurfaceView, puoi impostare lo schermo sempre acceso. Volevo che lo schermo rimanesse acceso mentre questa vista disegnava ancora cose.
public class MyCoolSurfaceView extends SurfaceView {
@Override
protected void onAttachedToWindow (){
super.onAttachedToWindow();
this.setKeepScreenOn(true);
}
@Override
protected void onDetachedFromWindow(){
super.onDetachedFromWindow();
this.setKeepScreenOn(false);
}
Mettilo su onStart
PowerManager powerManager = (PowerManager) getSystemService(Context.POWER_SERVICE); wakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "no sleep"); wakeLock.acquire();
E questo a te lo manifesti
<uses-permission android:name="android.permission.WAKE_LOCK" />
Non dimenticare di farlo
wakeLock.release();
a onStop
PARTIAL_WAKE_LOCKconsente allo schermo di spegnersi.
questo è il modo migliore per risolverlo
getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN | WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
android:keepScreenOn="true"
èil modo migliore per gestirlo se vogliamo che uno schermo in particolare sia sempre sveglio altrimenti dobbiamo gestire te stesso quando abilitarlo e disabilitarlo
https://developer.android.com/training/scheduling/wakelock.html
procedure SetSleep(aEnable:Boolean);
var
vFlags: integer;
begin
vFlags := TJWindowManager_LayoutParams.JavaClass.FLAG_TURN_SCREEN_ON or
TJWindowManager_LayoutParams.JavaClass.FLAG_DISMISS_KEYGUARD or
TJWindowManager_LayoutParams.JavaClass.FLAG_SHOW_WHEN_LOCKED or
TJWindowManager_LayoutParams.JavaClass.FLAG_KEEP_SCREEN_ON;
if aEnable then
begin
CallInUIThread ( // uses FMX.Helpers.Android
procedure
begin
TAndroidHelper.Activity.getWindow.setFlags (vFlags, vFlags);
end );
end
else
CallInUIThread (
procedure
begin
TAndroidHelper.Activity.getWindow.clearFlags (vFlags);
end );
end;
1.getWindow (). AddFlags (WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); è la soluzione migliore per Android nativo.
2. se vuoi fare con l'applicazione Android React, usa il codice sottostante.
@ReactMethod
public void activate() {
final Activity activity = getCurrentActivity();
if (activity != null) {
activity.runOnUiThread(new Runnable() {
@Override
public void run() {
activity.getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
}
});
}
}
Questo può essere fatto acquisendo un Wake Lock.
Non l'ho testato da solo, ma ecco un piccolo tutorial su questo.
View#setKeepScreenOno il suo attributo di layout xml equivalente,android:keepScreenOn="true"
WakeLock.
android:keepScreenOn="true"è l'unica risposta valida per le attività secondo me. Stai lontano dai wakelock a meno che non sia assolutamente necessario.
View.setKeepScreenOn()[link] [1] ?. Non l'ho mai usato io stesso però. [1]: developer.android.com/reference/android/view/…