studio programacion para móviles libro edición desarrollo desarrollar curso aprende aplicaciones android android-activity dialog lockscreen android-windowmanager

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 ...