¿Cómo puedo crear una actividad visible en la parte superior de la pantalla de bloqueo
Estoy recibiendo una notificación C2DM entrante mientras la pantalla está bloqueada. Me gustaría despertar la pantalla y mostrar el mensaje de notificación en la parte superior de la pantalla de bloqueo con una actividad. Estoy lanzando la actividad de notificación de mi C2DM BroadcastReceiver de la siguiente manera:
Intent new_intent= new Intent().setClass( context, EIAlertDialog.class ); new_intent.addFlags( Intent.FLAG_ACTIVITY_CLEAR_TOP ); new_intent.addFlags( Intent.FLAG_ACTIVITY_NEW_TASK ); context.startActivity( new_intent );
Y dentro del método onCreate de la actividad de notificación, despierto la pantalla de la siguiente manera:
- Bloqueo de orientación de la pantalla
- ¿Qué es com.walkfreestub? (Causando accidentes en Android)
- ¿Cómo mostrar la actividad cuando la pantalla está bloqueada?
- Bluetooth En Android: mi Socket.connect () bloquea para siempre, y Socket.close no desbloquea
- Bloquear textos entrantes (Android)
PowerManager powerManager= (PowerManager)getSystemService( Context.POWER_SERVICE ); if (!powerManager.isScreenOn()) { mWakeLock= powerManager.newWakeLock( PowerManager.FULL_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP, "My Tag" ) mWakeLock.acquire(); }
La pantalla se ha despertado, pero la actividad de notificación no es visible hasta que desbloqueo la pantalla.
Me doy cuenta de que puedo evitar la pantalla de bloqueo con el código de abajo, pero eso no es deseado. Quiero que el usuario desbloquee el teléfono, sólo si él / ella está interesado en leer / responder a la notificación.
getWindow().addFlags( WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD | WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED | WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON );
- Android Native crash en /system/lib/libskia.so
- Pantalla de bloqueo personalizada para Android
- Cómo bloquear / desbloquear el teléfono mediante programación: Android
- ¿Cuándo se desactiva exactamente el servicio NFC?
- Actividad con una altura específica frente a la lockscreen
- ¿Es Sqlite Database thread de instancia seguro
- Anular el botón de retroceso en android
- Android: identificadores duplicados en la jerarquía de vistas
Esto no es posible hasta donde yo sepa. Parece que está intentando replicar las experiencias de iOS. Usted debe darse cuenta de que android tiene sus propias convenciones y violarlos no es algo que debe hacer a la ligera.
Android es un poco de una contradicción. Es muy abierto y como desarrollador tienes acceso a cualquier cosa, y depende de ti usar esos poderes para bien o para mal. Cuando digo mal no me refiero al malware. Me refiero a las aplicaciones que tratan de obtener linda y utilizar las cosas de manera que no estaban destinados a ser utilizados, como poner en las notificaciones pidiendo que utilice la aplicación más. La contradicción es que en realidad no tienes acceso a todo, hay algunas partes que los desarrolladores decidieron que eran tan importantes que la aplicación no podía meterse con ellos. La pantalla de bloqueo es una de esas partes. Puedes reemplazar tu aplicación de inicio todo lo que quieras, pero nunca tendrás que preocuparte por la falla de tu pantalla de bloqueo de reemplazo y evitar que accedas a tu teléfono.
Incluso si esto fuera posible tendrías más problemas para tratar. Cada pantalla de bloqueo es diferente, los fabricantes pueden y lo personalizan para que no tenga garantías de que su actividad no interfiera en el desbloqueo del teléfono.
Utiliza las banderas es la forma correcta de hacerlo, utilizando el administrador de energía está mal.
Sus peticiones suenan en conflicto conmigo: usted dice que desea que la actividad aparezca en la parte superior de la pantalla de bloqueo (de hecho no lo hacemos, esconder la pantalla de bloqueo para que la actividad se puede ver), mientras que al mismo tiempo que Desea que el usuario primero tenga que desbloquear el dispositivo.
Si usted está pensando que desea que el usuario vea una notificación antes de desbloquear el dispositivo para ver su actividad … Realmente creo que usted no quiere que. La notificación es muy pequeña (en la barra de estado en la parte superior), y la siguiente que se muestra al publicarlo es muy transitoria. Esto no va a ser una buena experiencia para alguien que escuchó el tono de su teléfono o zumbido y lo está sacando para ver lo que está pasando.
Debe utilizar cualquier combinación de los indicadores de ventana que tengan sentido para su aplicación. Usted puede obtener prácticamente cualquier comportamiento razonable entre las diversas combinaciones de ellos. Estos se utilizan para el despertador, la llamada entrante UI, etc
Prueba esto en tu actividad
PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE); boolean screenOn = pm.isScreenOn();//check id screen is on if(!screenOn){//if not turn it on or wkaeup the screen final PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK, "Screen On"); wl.acquire(); Toast.makeText(getBaseContext(), "This is WAKEUP SCREEN", Toast.LENGTH_SHORT).show(); Thread timer = new Thread(){ public void run(){ try { sleep(5000); } catch (InterruptedException e) { // TODO: handle exception }finally{ wl.release();// release wakelock important } } }; timer.start(); } getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED); getWindow().addFlags(WindowManager.LayoutParams.FLAG_ALLOW_LOCK_WHILE_SCREEN_ON);//keep the activity running under lock screen..
Espero que esto ayude
- ¿Cómo hacer que una carga de WebView para Android sea más rápida?
- ¿Cómo obtener una nueva instancia de mi clase de aplicación para cada prueba de unidad?