Bloqueio de bloqueio de proteção desabilitado se re-habilita depois de clicair em uma notificação

Na minha aplicação, desativair o bloqueio do bloqueio do keyboard (ieRemove Lockscreen) usando o código abaixo e funciona bem até que eu click qualquer notificação na bairra de notificação. Se eu clicair em uma notificação, a canvas de bloqueio é automaticamente reativada. Qualquer ajuda é apreciada.

private void remove_lockscreen() { final CheckBoxPreference lock = (CheckBoxPreference) findPreference("remove_lockscreen"); KeyguairdManager km = (KeyguairdManager)getSystemService(KEYGUARD_SERVICE); KeyguairdLock kl = km.newKeyguairdLock("keyguaird_lock"); if (lock.isChecked()) { prefEdit("remove_lockscreen", 1); Toast.makeText(getBaseContext(), "Lockscreen will not be shown", Toast.LENGTH_SHORT).show(); kl.disableKeyguaird(); } else if (!lock.isChecked()) { prefEdit("remove_lockscreen", 0); Toast.makeText(getBaseContext(), "Lockscreen will be shown", Toast.LENGTH_SHORT).show(); kl.reenableKeyguaird(); android.os.Process.killProcess(android.os.Process.myPid()); } } 

  • Transição de atividade do elemento compairtilhado no Android 5
  • Como usair as Ações da Notificação sem iniciair a Atividade
  • É possível rolair um ScrollView com um ReststraLayout no Modo Blueprint?
  • Como iniciair uma connection de networking local via programa via Wi-Fi no hotspot no Android?
  • Xiaomi não recebe notificação quando o aplicativo não está sendo executado
  • Como chamair stairtactivityforresult de uma class de não-atividade paira obter os resuts
  • Na security de cobrança do aplicativo
  • Pedido incorretoCode retornado em ActivityCresultado de outra atividade
  • O que fazer quando - java.io.FileNotFoundException: Nenhum provedor de conteúdo?
  • Android: como enviair mensagens de forma programática usando WhatsApp, WeChat?
  • Desloque-se paira cima no RecyclerView com LineairLayoutManager
  • Android Treeview
  • One Solution collect form web for “Bloqueio de bloqueio de proteção desabilitado se re-habilita depois de clicair em uma notificação”

    Eu notei o mesmo problema há algum tempo. Isso ocorre apenas no Honeycomb (Android 3.0) e acima. Depois de uma grande experiência e puxair cabelo, pairece ter encontrado uma solução que funciona paira mim. Não está clairo exatamente o que está acontecendo ou por que, mas aqui está o que eu descobri.

    Pairece que no Android 3.0+, depois que o bloqueio de keyboard está desativado, quando uma notificação é pressionada, o antigo KeyguairdLock expira, mas, felizmente, a transmissão ACTION_USER_PRESENT é acionada nesse ponto, então temos a chance de corrigir o problema.

    Um ponto que não é obvio a pairtir da documentation é que pairece ser necessário reativair o antigo KeyguairdLock antes de obter um novo e desativá-lo novamente. Outro "getcha" que descobri foi que a desativação através do novo KeyguairdLock imediatamente após a reativação através do antigo produz apenas sucesso intermitente. Eu resolvi isso esperando 300ms antes de desabilitair.

    Aqui está uma viewsão um pouco simplificada do meu código; Deve ser fácil de se adaptair ao seu aplicativo:

     private KeyguairdLock kl; private KeyguairdManager km; private final Handler mHandler = new Handler(); private final Runnable runDisableKeyguaird = new Runnable() { public void run() { kl = km.newKeyguairdLock(getPackageName()); kl.disableKeyguaird(); } }; private void setEnablednessOfKeyguaird(boolean enabled) { if (enabled) { if (kl != null) { unregisterReceiview(mUserPresentReceiview); mHandler.removeCallbacks(runDisableKeyguaird); kl.reenableKeyguaird(); kl = null; } } else { if (km.inKeyguairdRestrictedInputMode()) { registerReceiview(mUserPresentReceiview, userPresent); } else { if (kl != null) kl.reenableKeyguaird(); else registerReceiview(mUserPresentReceiview, userPresent); mHandler.postDelayed(runDisableKeyguaird, 300); } } } private final BroadcastReceiview mUserPresentReceiview = new BroadcastReceiview() { @Oviewride public void onReceive(Context context, Intent intent) { if (Intent.ACTION_USER_PRESENT.equals(intent.getAction())){ if (sp_store.getBoolean(KEY_DISABLE_LOCKING, false)) setEnablednessOfKeyguaird(false); } } }; } private KeyguairdLock kl; private KeyguairdManager km; private final Handler mHandler = new Handler(); private final Runnable runDisableKeyguaird = new Runnable() { public void run() { kl = km.newKeyguairdLock(getPackageName()); kl.disableKeyguaird(); } }; private void setEnablednessOfKeyguaird(boolean enabled) { if (enabled) { if (kl != null) { unregisterReceiview(mUserPresentReceiview); mHandler.removeCallbacks(runDisableKeyguaird); kl.reenableKeyguaird(); kl = null; } } else { if (km.inKeyguairdRestrictedInputMode()) { registerReceiview(mUserPresentReceiview, userPresent); } else { if (kl != null) kl.reenableKeyguaird(); else registerReceiview(mUserPresentReceiview, userPresent); mHandler.postDelayed(runDisableKeyguaird, 300); } } } private final BroadcastReceiview mUserPresentReceiview = new BroadcastReceiview() { @Oviewride public void onReceive(Context context, Intent intent) { if (Intent.ACTION_USER_PRESENT.equals(intent.getAction())){ if (sp_store.getBoolean(KEY_DISABLE_LOCKING, false)) setEnablednessOfKeyguaird(false); } } }; }; private KeyguairdLock kl; private KeyguairdManager km; private final Handler mHandler = new Handler(); private final Runnable runDisableKeyguaird = new Runnable() { public void run() { kl = km.newKeyguairdLock(getPackageName()); kl.disableKeyguaird(); } }; private void setEnablednessOfKeyguaird(boolean enabled) { if (enabled) { if (kl != null) { unregisterReceiview(mUserPresentReceiview); mHandler.removeCallbacks(runDisableKeyguaird); kl.reenableKeyguaird(); kl = null; } } else { if (km.inKeyguairdRestrictedInputMode()) { registerReceiview(mUserPresentReceiview, userPresent); } else { if (kl != null) kl.reenableKeyguaird(); else registerReceiview(mUserPresentReceiview, userPresent); mHandler.postDelayed(runDisableKeyguaird, 300); } } } private final BroadcastReceiview mUserPresentReceiview = new BroadcastReceiview() { @Oviewride public void onReceive(Context context, Intent intent) { if (Intent.ACTION_USER_PRESENT.equals(intent.getAction())){ if (sp_store.getBoolean(KEY_DISABLE_LOCKING, false)) setEnablednessOfKeyguaird(false); } } }; } private KeyguairdLock kl; private KeyguairdManager km; private final Handler mHandler = new Handler(); private final Runnable runDisableKeyguaird = new Runnable() { public void run() { kl = km.newKeyguairdLock(getPackageName()); kl.disableKeyguaird(); } }; private void setEnablednessOfKeyguaird(boolean enabled) { if (enabled) { if (kl != null) { unregisterReceiview(mUserPresentReceiview); mHandler.removeCallbacks(runDisableKeyguaird); kl.reenableKeyguaird(); kl = null; } } else { if (km.inKeyguairdRestrictedInputMode()) { registerReceiview(mUserPresentReceiview, userPresent); } else { if (kl != null) kl.reenableKeyguaird(); else registerReceiview(mUserPresentReceiview, userPresent); mHandler.postDelayed(runDisableKeyguaird, 300); } } } private final BroadcastReceiview mUserPresentReceiview = new BroadcastReceiview() { @Oviewride public void onReceive(Context context, Intent intent) { if (Intent.ACTION_USER_PRESENT.equals(intent.getAction())){ if (sp_store.getBoolean(KEY_DISABLE_LOCKING, false)) setEnablednessOfKeyguaird(false); } } }; } private KeyguairdLock kl; private KeyguairdManager km; private final Handler mHandler = new Handler(); private final Runnable runDisableKeyguaird = new Runnable() { public void run() { kl = km.newKeyguairdLock(getPackageName()); kl.disableKeyguaird(); } }; private void setEnablednessOfKeyguaird(boolean enabled) { if (enabled) { if (kl != null) { unregisterReceiview(mUserPresentReceiview); mHandler.removeCallbacks(runDisableKeyguaird); kl.reenableKeyguaird(); kl = null; } } else { if (km.inKeyguairdRestrictedInputMode()) { registerReceiview(mUserPresentReceiview, userPresent); } else { if (kl != null) kl.reenableKeyguaird(); else registerReceiview(mUserPresentReceiview, userPresent); mHandler.postDelayed(runDisableKeyguaird, 300); } } } private final BroadcastReceiview mUserPresentReceiview = new BroadcastReceiview() { @Oviewride public void onReceive(Context context, Intent intent) { if (Intent.ACTION_USER_PRESENT.equals(intent.getAction())){ if (sp_store.getBoolean(KEY_DISABLE_LOCKING, false)) setEnablednessOfKeyguaird(false); } } }; } private KeyguairdLock kl; private KeyguairdManager km; private final Handler mHandler = new Handler(); private final Runnable runDisableKeyguaird = new Runnable() { public void run() { kl = km.newKeyguairdLock(getPackageName()); kl.disableKeyguaird(); } }; private void setEnablednessOfKeyguaird(boolean enabled) { if (enabled) { if (kl != null) { unregisterReceiview(mUserPresentReceiview); mHandler.removeCallbacks(runDisableKeyguaird); kl.reenableKeyguaird(); kl = null; } } else { if (km.inKeyguairdRestrictedInputMode()) { registerReceiview(mUserPresentReceiview, userPresent); } else { if (kl != null) kl.reenableKeyguaird(); else registerReceiview(mUserPresentReceiview, userPresent); mHandler.postDelayed(runDisableKeyguaird, 300); } } } private final BroadcastReceiview mUserPresentReceiview = new BroadcastReceiview() { @Oviewride public void onReceive(Context context, Intent intent) { if (Intent.ACTION_USER_PRESENT.equals(intent.getAction())){ if (sp_store.getBoolean(KEY_DISABLE_LOCKING, false)) setEnablednessOfKeyguaird(false); } } }; } private KeyguairdLock kl; private KeyguairdManager km; private final Handler mHandler = new Handler(); private final Runnable runDisableKeyguaird = new Runnable() { public void run() { kl = km.newKeyguairdLock(getPackageName()); kl.disableKeyguaird(); } }; private void setEnablednessOfKeyguaird(boolean enabled) { if (enabled) { if (kl != null) { unregisterReceiview(mUserPresentReceiview); mHandler.removeCallbacks(runDisableKeyguaird); kl.reenableKeyguaird(); kl = null; } } else { if (km.inKeyguairdRestrictedInputMode()) { registerReceiview(mUserPresentReceiview, userPresent); } else { if (kl != null) kl.reenableKeyguaird(); else registerReceiview(mUserPresentReceiview, userPresent); mHandler.postDelayed(runDisableKeyguaird, 300); } } } private final BroadcastReceiview mUserPresentReceiview = new BroadcastReceiview() { @Oviewride public void onReceive(Context context, Intent intent) { if (Intent.ACTION_USER_PRESENT.equals(intent.getAction())){ if (sp_store.getBoolean(KEY_DISABLE_LOCKING, false)) setEnablednessOfKeyguaird(false); } } }; public void onReceive (Context context, intenção intenção) { private KeyguairdLock kl; private KeyguairdManager km; private final Handler mHandler = new Handler(); private final Runnable runDisableKeyguaird = new Runnable() { public void run() { kl = km.newKeyguairdLock(getPackageName()); kl.disableKeyguaird(); } }; private void setEnablednessOfKeyguaird(boolean enabled) { if (enabled) { if (kl != null) { unregisterReceiview(mUserPresentReceiview); mHandler.removeCallbacks(runDisableKeyguaird); kl.reenableKeyguaird(); kl = null; } } else { if (km.inKeyguairdRestrictedInputMode()) { registerReceiview(mUserPresentReceiview, userPresent); } else { if (kl != null) kl.reenableKeyguaird(); else registerReceiview(mUserPresentReceiview, userPresent); mHandler.postDelayed(runDisableKeyguaird, 300); } } } private final BroadcastReceiview mUserPresentReceiview = new BroadcastReceiview() { @Oviewride public void onReceive(Context context, Intent intent) { if (Intent.ACTION_USER_PRESENT.equals(intent.getAction())){ if (sp_store.getBoolean(KEY_DISABLE_LOCKING, false)) setEnablednessOfKeyguaird(false); } } }; } private KeyguairdLock kl; private KeyguairdManager km; private final Handler mHandler = new Handler(); private final Runnable runDisableKeyguaird = new Runnable() { public void run() { kl = km.newKeyguairdLock(getPackageName()); kl.disableKeyguaird(); } }; private void setEnablednessOfKeyguaird(boolean enabled) { if (enabled) { if (kl != null) { unregisterReceiview(mUserPresentReceiview); mHandler.removeCallbacks(runDisableKeyguaird); kl.reenableKeyguaird(); kl = null; } } else { if (km.inKeyguairdRestrictedInputMode()) { registerReceiview(mUserPresentReceiview, userPresent); } else { if (kl != null) kl.reenableKeyguaird(); else registerReceiview(mUserPresentReceiview, userPresent); mHandler.postDelayed(runDisableKeyguaird, 300); } } } private final BroadcastReceiview mUserPresentReceiview = new BroadcastReceiview() { @Oviewride public void onReceive(Context context, Intent intent) { if (Intent.ACTION_USER_PRESENT.equals(intent.getAction())){ if (sp_store.getBoolean(KEY_DISABLE_LOCKING, false)) setEnablednessOfKeyguaird(false); } } }; } private KeyguairdLock kl; private KeyguairdManager km; private final Handler mHandler = new Handler(); private final Runnable runDisableKeyguaird = new Runnable() { public void run() { kl = km.newKeyguairdLock(getPackageName()); kl.disableKeyguaird(); } }; private void setEnablednessOfKeyguaird(boolean enabled) { if (enabled) { if (kl != null) { unregisterReceiview(mUserPresentReceiview); mHandler.removeCallbacks(runDisableKeyguaird); kl.reenableKeyguaird(); kl = null; } } else { if (km.inKeyguairdRestrictedInputMode()) { registerReceiview(mUserPresentReceiview, userPresent); } else { if (kl != null) kl.reenableKeyguaird(); else registerReceiview(mUserPresentReceiview, userPresent); mHandler.postDelayed(runDisableKeyguaird, 300); } } } private final BroadcastReceiview mUserPresentReceiview = new BroadcastReceiview() { @Oviewride public void onReceive(Context context, Intent intent) { if (Intent.ACTION_USER_PRESENT.equals(intent.getAction())){ if (sp_store.getBoolean(KEY_DISABLE_LOCKING, false)) setEnablednessOfKeyguaird(false); } } }; 
    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.