programacion - Actividad de Android en la pantalla de bloqueo predeterminada
manual de programacion android pdf (4)
No vaya a la actividad porque Android no mostrará la pantalla de bloqueo detrás de su actividad por razones de seguridad, por lo tanto, use el servicio en lugar de la actividad.
A continuación está mi código en onStartCommand de mi servicio.
WindowManager mWindowManager = (WindowManager) getSystemService(WINDOW_SERVICE);
View mView = mInflater.inflate(R.layout.score, null);
WindowManager.LayoutParams mLayoutParams = new WindowManager.LayoutParams(
ViewGroup.LayoutParams.WRAP_CONTENT,
ViewGroup.LayoutParams.WRAP_CONTENT, 0, 0,
WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY,
WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED
| WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD
| WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON
/* | WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON */,
PixelFormat.RGBA_8888);
mWindowManager.addView(mView, mLayoutParams);
Y agregue <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
para manifestar
¿Cómo puedo mostrar una Activity
o un Dialog
de Dialog
para que esté visible en la pantalla de bloqueo?
Ya he intentado mostrar mi actividad de bloqueo cuando la pantalla se enciende configurando varios tipos de ventana en el método Activity.onCreate()
:
TYPE_PRIORITY_PHONE
TYPE_SYSTEM_ALERT
TYPE_KEYGUARD
y otros junto con los SYSTEM_ALERT_WINDOW
y INTERNAL_SYSTEM_WINDOW
.
Mi actividad es visible después de desbloquear el dispositivo.
ACTUALIZAR:
De hecho, ya logré mostrar mi propia actividad en lugar de la pantalla de bloqueo predeterminada. Funciona perfectamente a menos que use el botón HOME.
Puede usar el código en cualquiera de las respuestas aquí que crea que está funcionando. Luego, para evitar que el botón HOME funcione, cambie TYPE_SYSTEM_ALERT
o TYPE_SYSTEM_OVERLAY
(depende de lo que use actualmente) a TYPE_SYSTEM_ERROR
:
params = new WindowManager.LayoutParams(
WindowManager.LayoutParams.MATCH_PARENT,
WindowManager.LayoutParams.MATCH_PARENT,
WindowManager.LayoutParams.TYPE_SYSTEM_ERROR,
WindowManager.LayoutParams.FLAG_FULLSCREEN |
WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED |
WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD,
PixelFormat.TRANSLUCENT
);
params.gravity = Gravity.TOP;
mOverlay = (RelativeLayout) inflater.inflate(R.layout.main, (ViewGroup) null);
mWindowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
mWindowManager.addView(mOverlay, params);
Use esto en el método onCreate
getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
getWindow().addFlags(WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);
// This line should be before setContentView..
setContentView(......);
Espero que esto funcione
getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON|
WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD|
WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED|
WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);
intente utilizar estos indicadores para desactivar la pantalla de bloqueo cuando se inicie la actividad.
Después de API nivel 17 puedes usar
<activity
android:name=".yourActivityName"
android:showOnLockScreen="true"
android:screenOrientation="sensorPortrait" >
showOnLockScreen como en el ejemplo ...