安卓锁屏保护

4

我正在开发一个应用程序,用于替换安卓设备上的默认锁屏(滑动以解锁)。我成功地通过禁用钥匙保管员并使用屏幕关闭和屏幕打开意图广播接收器显示我的活动来实现此操作。现在,问题是当我出于任何原因重新设置默认屏幕锁定时,除非我强制关闭并重新启动应用程序,否则我的应用程序将无法禁用钥匙保护。

      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);
      }

如果您收到屏幕关闭的广播,难道不能使用 isKeyGuardLocked() 检查它是否被锁定,然后立即再次禁用它吗? - MarchingHome
我已经在做这件事了,但由于未知原因它并没有再次禁用。一旦我强制关闭应用程序并重新启动,一切就正常运行了。 - salman
2个回答

4

接受的答案可能已经过时了。

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

顺便说一下,我不建议采用这种方法,因为崩溃或卸载会使用户面临一个他们不知道密码的设备锁定。


4
您不能使用用户应用程序替换锁屏。任何您所做的都是一种黑客行为,可能在某些设备上工作或不工作,并且很可能会在新版本中失效。您可以创建类似于屏幕锁定的东西,但它不会像一个锁屏那样工作。此外,在最近的Android版本(ICS之后),解锁屏幕会执行额外的操作,例如解锁凭据存储,而您的应用程序不可能执行此操作(因为它没有系统权限)。
如果您真的想要替换屏幕锁定,则需要构建自己的Android ROM,修改/替换原始ROM。

我明白了。我已经测试了GO启动器,它也遇到了我应用程序面临的同样问题。感谢您的回答 :) - salman
@Nikolay 说得非常好。 - crypted

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接