studio - protector de pantalla reloj para android
Android desactiva el tiempo de espera de la pantalla mientras se ejecuta la aplicaciĆ³n (11)
En una Vista, en mi caso una subclase SurfaceView, puede configurar la pantalla siempre encendida. Quería que la pantalla permaneciera encendida mientras esta vista todavía estaba dibujando cosas.
public class MyCoolSurfaceView extends SurfaceView {
@Override
protected void onAttachedToWindow (){
super.onAttachedToWindow();
this.setKeepScreenOn(true);
}
@Override
protected void onDetachedFromWindow(){
super.onDetachedFromWindow();
this.setKeepScreenOn(false);
}
¿Hay alguna manera de desactivar el protector de pantalla mientras mi aplicación se está ejecutando?
La atenuación de la pantalla es lo que quiero decir.
Es importante tener en cuenta que todos estos métodos deben ejecutarse desde el hilo de la interfaz de usuario para funcionar. Ver cambiar KeepScreenOn de javascript en la aplicación Android cordova
Esto se puede hacer adquiriendo un Wake Lock.
No lo probé yo mismo, pero here hay un pequeño tutorial sobre esto.
Pon esto en onStart
PowerManager powerManager = (PowerManager) getSystemService(Context.POWER_SERVICE); wakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "no sleep"); wakeLock.acquire();
Y esto a ti manifiesta
<uses-permission android:name="android.permission.WAKE_LOCK" />
No olvides
wakeLock.release();
en OnStop
Quieres usar algo como esto:
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
Simple, agregue la línea debajo de su MainActivity
y su aplicación nunca apague las luces.
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
Solía:
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
para desactivar el tiempo de espera de la pantalla y
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
para volver a habilitarlo.
También hay una forma XML que Google recomienda:
<LinearLayout
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:keepScreenOn="true">
Ver las diapositivas de Google - Diapositiva 16.
"Wakelocks es costoso si se olvida (...) Considera usar android: keepScreenOn para garantizar la corrección"
esta es la mejor manera de resolver esto
getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN | WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
android:keepScreenOn="true"
es la mejor manera de manejar esto si queremos hacer que una pantalla en particular esté activa todo el tiempo; de lo contrario, tenemos que manejarnos a nosotros mismos cuando lo habilitemos y deshabilitemos
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;