4

我正在开发一个应用程序,它将替换 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);
      }
4

2 回答 2

4

您不能用用户应用程序替换锁定屏幕。您所做的任何事情都是 hack,可能会或可能不会在某些设备上运行,并且可能会随着新版本的发布而中断。您可以创建一些看起来像屏幕锁定的东西,但它不会像屏幕锁定一样工作。此外,在最新版本的 Android(后 ICS)中,解锁屏幕会做一些额外的事情,比如解锁凭证存储,这是您的应用不可能做到的(因为它没有系统权限)。

如果你真的想更换屏幕锁定,你需要构建自己的Android ROM,修改/更换库存的。

于 2012-10-18T02:39:29.410 回答
4

接受的答案可能已过时。

因此,理论上可以使用应用程序生成的密码(提供真正的安全性)来保护实际的锁屏,在 android 锁屏上方浮动自定义锁屏,并且 - 当提供正确的密码时 - 解锁和关闭真正的锁屏。最后,您将使用接收器来恢复或清除相关事件(如 SCREEN_OFF 或 SCREEN_ON)的密码——如果尚未达到超时,后者可以自动清除密码。

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

于 2015-06-08T15:49:50.470 回答