samsung reloj quitar puedo pantalla notificaciones las imagen fondo como cambiar bloqueo activar android android-activity android-alarms lockscreen android-notification-bar

reloj - no puedo cambiar el fondo de pantalla de bloqueo android



Android Galaxy S4-Actividad que es visible en la pantalla de bloqueo (4)

Hace unos años, escribí una aplicación de alarma que funcionaba en Android 2, y ahora estoy tratando de actualizarla para que funcione en Android 4. Específicamente, en el Samsung Galaxy S4.

En Android 2, si el teléfono estaba durmiendo, despertaría el teléfono y mostraría una pantalla "Snooze or Dismiss" sobre la pantalla de bloqueo.

En Android 4, despierta el teléfono, pero debes desbloquearlo, luego abrir el área de notificaciones y luego hacer clic en la notificación de la alarma antes de presionar "Descartar".

Siempre he estado usando este código para hacer el despertar:

getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED | WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD | WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON | WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);

He leído 8 preguntas diferentes de stackoverflow sobre este tema. La mayoría de ellos dan el código anterior, que funcionó para mí hace años en Android 2 pero no funciona en Android 4. Pero ninguno de ellos me ha ayudado a resolver este problema. Aquí están las preguntas que leí y probé:

Android: eliminar o desactivar mediante programación la pantalla de bloqueo en el dispositivo Samsung Galaxy S2

¿Cómo se visualiza una ventana de TYPE_SYSTEM_ALERT a pantalla completa?

¿Cómo creo una actividad que esté visible en la parte superior de la pantalla de bloqueo?

Cómo iniciar un diálogo (como alarma dimiss / snooze) que se puede hacer clic sin desbloquear la pantalla

Actividad de Android en la pantalla de bloqueo predeterminada

dispositivo Android bloqueado, pero quiere que suene la alarma y aparezca el diálogo

Diálogo de Android sobre la pantalla de bloqueo

Mostrar el diálogo con eventos táctiles sobre la pantalla de bloqueo en Android 2.3

¿Alguien tiene alguna idea sobre lo que ha cambiado en Android 4 que puede haber causado esto?

EDITAR: Este es uno de los ejemplos más simples que he visto de un diálogo de alarma que no aparece "minimizado". No aparece, como está escrito, sobre la pantalla de bloqueo, pero puede solucionarlo con WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED

http://wptrafficanalyzer.in/blog/setting-up-alarm-using-alarmmanager-and-waking-up-screen-and-unlocking-keypad-on-alarm-goes-off-in-android/

Está escrito con FragmentActivity y DialogFragment, pero todavía funciona como una actividad. Utiliza un AlertDialog.Builder para hacer el diálogo, y si intenta hacerlo con un diseño XML, no funcionará. ¿Por qué?


No estoy seguro de si este es el problema en todos los casos, pero la documentación de ShowWhenLocked dice que se aplica solo a la ventana de la pantalla completa más alta . Tenía una ventana temática como un diálogo que no funcionaba, pero funcionó bien una vez que lo cambié a una ventana de pantalla completa normal.


Lo descubrí, y la respuesta fue muy diferente de lo que esperaba.

Este fragmento de código se incluyó en la muestra del despertador de Android 2, en la actividad AlarmAlert.java:

@Override protected void onStop() { super.onStop(); // Don''t hang around. finish(); }

Como referencia, puede ver el archivo del código de ejemplo en el pasado de Git aquí mismo , que contiene la función onStop anterior. Nunca causó un problema en Android 2.

Pero en Android 4, si el teléfono estaba apagado, este onStop se dispararía justo antes de que el teléfono se despertara, efectivamente "minimizando" la Actividad. Una vez que eliminé esta función, inmediatamente funcionó de nuevo.

Pero me pregunto, ¿este es el problema que otras personas como @radley y @Guardanis están recibiendo? Parece poco probable, pero por favor avíseme si esto también soluciona sus problemas.

Si está visitando esta respuesta en el futuro y está obteniendo este problema, lo que intentaría es:

  1. onStop cualquier función de onStop .

  2. Agrega este código a la Actividad:

    getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED | WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD | WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON | WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON);

  3. Asegúrese de estar utilizando un tema de pantalla completa y no un tema de diálogo.

  4. Esto no hizo una diferencia para mí, pero podrías intentar configurar showOnLockScreen explícitamente en el manifiesto: <activity android:name="com.example.MyActivity" android:showOnLockScreen="true"/>

  5. Una segunda cosa que no marcó la diferencia para mí, pero que podría intentar es agregar el indicador WindowManager.LayoutParams.FLAG_FULLSCREEN

Espero que esto ayude a otras personas!


Correcto - Así que he estado luchando con este recientemente, pero con un 5.0.2 Galaxy Tab A. Como era de esperar, lo que funciona en todos los demás dispositivos no funciona en Samsung (este ha sido el caso desde el primer dispositivo Samsung Galaxy, rompen algo nuevo). cada lanzamiento!)

La solución general para mostrar una Actividad en la pantalla de bloqueo para la mayoría de los dispositivos es

//wake up device and show even when on lock screen getWindow().addFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD | WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED | WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON | WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON | WindowManager.LayoutParams.FLAG_FULLSCREEN);

Sin embargo, esto no funciona para dispositivos Samsung. La eliminación de FLAG_DISMISS_KEYGUARD sin embargo hace este truco.

Mirando los documentos para esta bandera tenemos

Indicador de ventana: cuando se establece, la ventana hará que se descuelgue el bloqueo de teclas, solo si no se trata de un bloqueo de teclado seguro. Debido a que dicho bloqueo de teclado no es necesario para la seguridad, nunca volverá a aparecer si el usuario navega a otra ventana (a diferencia de FLAG_SHOW_WHEN_LOCKED, que solo ocultará temporalmente los protectores de teclado seguros y no seguros, pero asegurará que vuelvan a aparecer cuando el usuario se mueva a otra interfaz de usuario que no los oculta). Si el bloqueo de teclas está actualmente activo y es seguro (requiere un patrón de desbloqueo), el usuario aún deberá confirmarlo antes de ver esta ventana, a menos que FLAG_SHOW_WHEN_LOCKED también se haya configurado.

y para FLAG_SHOW_WHEN_LOCKED tenemos

Indicador de ventana: indicador especial para permitir que las ventanas se muestren cuando la pantalla está bloqueada. Esto permitirá que las ventanas de aplicación tengan prioridad sobre la protección de clave o cualquier otra pantalla de bloqueo. Se puede usar con FLAG_KEEP_SCREEN_ON para activar la pantalla y mostrar ventanas directamente antes de mostrar la ventana de protección de teclas. Se puede usar con FLAG_DISMISS_KEYGUARD para descartar completamente los protectores de teclado no seguros. Esta bandera solo se aplica a la ventana de pantalla completa superior.

Puede ver que se pueden usar juntos, pero parece que Samsung no se molestará con FLAG_SHOW_WHEN_LOCKED si el dispositivo está bloqueado y FLAG_DISMISS_KEYGUARD está presente. Mi aplicación requiere una pantalla de bloqueo para ser configurada, por lo que quitar la bandera de descartar el bloqueo de teclas realmente me permite mostrar actividades de pantalla completa en la pantalla de bloqueo. Yay para mí, no para Samsung.


Una de las preguntas a las que se vinculó tiene una respuesta que pareció resolver este problema para mí.

Este es el código que estoy usando que parece estar funcionando:

@Override public void onAttachedToWindow() { Window window = getWindow(); window.addFlags(WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON | WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED | WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON | WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD | WindowManager.LayoutParams.FLAG_FULLSCREEN); super.onAttachedToWindow(); }

También declaro explícitamente esto en la definición de actividad en el manifiesto:

<activity android:name="com.example.MyActivity" android:label="@string/app_name" android:showOnLockScreen="true" >

Actividad de Android en la pantalla de bloqueo predeterminada