2012-10-17 68 views
4

我正在研究一个应用程序,它将取代Android设备的默认锁定屏幕(滑动解锁)。我已成功完成此操作,方法是禁用键盘锁管理器并使用广播接收器显示屏幕关闭和屏幕开启意图。现在,问题是当我因任何原因再次设置默认屏幕锁定时,我的应用程序不会禁用键盘锁,除非我强制关闭它并再次启动它。Android键盘锁

 km = (KeyguardManager) getApplicationContext().getSystemService(Context.KEYGUARD_SERVICE); 
     if(km.inKeyguardRestrictedInputMode()) { 
     //it is locked 
      km = (KeyguardManager) getApplicationContext().getSystemService(KEYGUARD_SERVICE); 
     kl=km.newKeyguardLock("com.example.helloworld.MainActivity"); 
     kl.disableKeyguard(); 
     } else { 
      Intent i = getIntent(); 
      i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
      getApplicationContext().startActivity(i); 
     } 
+0

如果您收到屏幕关闭的广播,是否可以使用[isKeyGuardLocked()](http://developer.android.com/reference/android/app/KeyguardManager.html#isKeyguardLocked())检查if它被锁定,然后立即禁用它呢? – MarchingHome

+0

我已经在使用它,但由于未知原因它不会再次禁用它。一旦我强制关闭应用程序并再次启动它,那么一切运行良好。 – salman

回答

4

您不能用用户应用程序替换锁定屏幕。你所做的任何事情都是黑客行为,可能会或可能无法在某些设备上工作,并可能会与新版本发生冲突。你可以创建一个看起来像屏幕锁的东西,但它不会像一个。此外,在最新版本的Android(后ICS)中,解锁屏幕会执行额外的操作,例如解锁凭证存储,这是您的应用无法执行的操作(因为它没有系统权限)。

如果你真的想要更换屏幕锁,你需要建立自己的Android ROM,修改/更换股票。

+0

我明白了。我已经测试过GO启动器,它有和我的应用程序面临的相同的问题。感谢您的答案:) – salman

+0

@尼科莱非常好说。 – crypted

2

接受的答案可能已过时。

结果被解雇FLAG_SHOW_WHEN_LOCKED(在another answer完整的解释)的当前锁定屏幕,这是理论上能够确保实际使用应用程序生成的密码锁屏(提供真正的安全性),在android锁定屏幕上方浮动自定义锁定屏幕,以及 - 当提供正确的密码时 - 解锁并关闭真正的锁定屏幕。最后,您将使用接收器恢复或清除SCREEN_OFF或SCREEN_ON等相关事件的密码 - 如果尚未达到超时,后者可自动清除密码。

FWIW,我不推荐这种方法,因为崩溃或卸载会导致用户被一个他们不知道的密码锁定的设备。