Devolver un resultado de error en inKeyguardRestrictedInputMode ()
Tengo una función para determinar cuatro estados de la pantalla del teléfono: pantalla encendido, pantalla apagada, pantalla encendido con la cerradura, pantalla encendido sin la cerradura. Mi función es
private KeyguardManager keyguardManager; public String getScreenStatus() { String sreen_State="unknown"; keyguardManager = (KeyguardManager) getSystemService(KEYGUARD_SERVICE); PowerManager pm = (PowerManager) getApplicationContext().getSystemService(Context.POWER_SERVICE); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT_WATCH) { if (pm.isInteractive()) { sreen_State="screen_on"; if(!keyguardManager.inKeyguardRestrictedInputMode()) { sreen_State="screen_on_no_lock_screen"; }else{ Log.i(TAG, "screen_on_lock_screen"); sreen_State="screen_on_lock_screen"; } } else { sreen_State="screen_off"; } } else if(Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT_WATCH){ if(pm.isScreenOn()){ sreen_State="screen_on"; if(!keyguardManager.inKeyguardRestrictedInputMode()) { Log.i(TAG, "screen_on_no_lock_screen"); sreen_State="screen_on_no_lock_screen"; }else{ Log.i(TAG, "screen_on_lock_screen"); sreen_State="screen_on_lock_screen"; } } else { mIsScreenOn=false; sreen_State="screen_off"; } } return sreen_State; }
La función anterior devuelve estados corregidos de la pantalla. Sin embargo, tiene error cuando agrego un código más como sigue:
- Firebase + Android - Notificaciones ChildAdded - ¿Cómo obtener sólo New Childs?
- Android - ¿Por qué se ejecutan varias instancias de este servicio
- Android: startActivityForResult no llamando aActivityResult
- Anfitrión androide de Android y sueño del dispositivo
- Uso de Job Scheduler en la API de Android <21
KeyguardManager.KeyguardLock kl = keyguardManager.newKeyguardLock("MyKeyguardLock"); if(index.equals("1")) kl.disableKeyguard(); else if(indexequals("2")) kl.reenableKeyguard(); getScreenStatus();
El índice puede cambiar pulsando un botón. Ahora, el estado equivocado de la pantalla es suceder. Siempre devuelve screen_on_lock_screen
, aunque la pantalla esté en screen_on_no_lock_screen
. ¿Cómo podría solucionar mi problema?
- Aplicación de Android como servicio sin actividad
- Detectar bloqueo de servicio
- Empleos para GCM Network Manager
- Android: mantener vivo el servicio incluso el proceso padre es asesinado
- Cómo supervisar el cambio de estado de SIM
- StopService () detendrá un servicio de primer plano?
- Diseño de arquitectura Android - ¿Cómo hacerlo bien?
- ¿Cómo puedo saber si mi servicio ha iniciado
Utilizando KeyguardManager.NewKeyguardLock
está obsoleto desde el nivel 13 de la API. ¿Lo intentó con FLAG_DISMISS_KEYGUARD
y FLAG_SHOW_WHEN_LOCKED
de WindowManager.LayoutParams.
Esta clase ha quedado obsoleta en el nivel API 13. Utilice FLAG_DISMISS_KEYGUARD y / o FLAG_SHOW_WHEN_LOCKED; Esto le permite ocultar perfectamente el bloqueo de teclado a medida que su aplicación se mueve dentro y fuera del primer plano y no requiere que se soliciten permisos especiales. > Handle devuelto por newKeyguardLock (String) que le permite inhabilitar el bloqueo de teclado.
Aquí el enlace forma la documentación de Android .
¡Espero eso ayude!