我正在构建一个Android应用程序,其中一个要求是应用程序需要让用户定义一个密码来锁定应用程序,这样,一旦用户设置了密码,密码就会被要求输入或重新输入 - 进入申请表。
而不是密码我将使用这个安卓代码库https://code.google.com/p/android-lockpattern,使用模式提供与主锁屏相同的模式行为。
到目前为止,没关系。
如果应用程序第一次打开,这意味着调用onCreated(),我可以检查是否设置了密码,如果是,则将用户重定向到他/她需要输入模式的屏幕。如果模式有效,那么,用户在,如果没有,则显示错误并离开应用程序。这种情况还可以。
但是,如果用户点击主页按钮并重新进入应用程序,则不会调用onCreated,因此现在不会进行任何密码检查。所以我正在查看其他活动生命周期的方法,如onPause,onRestart,onResume等...当用户重新进入应用程序时,所有这些方法都会被调用,此外,当用户通过按下后退导航到Activity时按钮。
所以我有点困惑/迷失在除了onCreated之外这个密码检查应该在哪里?当用户通过活动导航并突然返回MainActivity时,我不想显示密码屏幕。
如何在启动应用程序或重新进入应用程序时确保要求用户输入密码。
谢谢 TL
答案 0 :(得分:1)
这是另一个可能有帮助的问题。接受的答案需要额外的许可,如果您不想包含权限,另一个答案会探讨其他一些方法:stackoverflow.com/questions/13292547/
答案 1 :(得分:0)
查看Android Activity Lifecycle图表。我想你可能正在寻找onStart
,每当用户打开应用时,它就会从后台或作为一个新实例触发。
这是另一个与同一事物有关的问题:Android onCreate onResume
答案 2 :(得分:0)
我建议将其放在Timer或类似的东西上。每当用户与您的应用程序交互时,计时器(保存在Application类的扩展中)开始倒计时 - 比如3分钟。
一旦计数器到期(或者,当您的活动检查他们的onResume
计时器是否已过期时),它会再次启动您的顶级登录活动,清除后筹码as described in this answer。
这样做的好处是,当应用程序处于后台时,计时器仍在工作(假设它在一个单独的线程上),用户仍然可能意外关闭屏幕(例如),而不是被迫再次登录。我银行的应用就是这样的。
答案 3 :(得分:0)
在“活动”之间切换时,始终使用Intent
对象调用它们。创建onCreate()
时会执行Intent
方法,但如果您解锁手机,则执行的方法为onResume()
。
您必须使用onResume()
方法控制密码检查。每次执行此方法时都无法显示它,因为按后退键也会执行它。请注意,只有当您按后退键才能返回上一个Activity
时,您才不想执行密码检查,也许您应该在onResume()
上查看方法,如果Intent来自Activity
或用户应该来自的活动。因此,如果不是这些活动中的任何一个,它将显示密码检查。
PD:还有一种方法可以检测用户是否来自解锁手机。您需要检测Intent
是否为ACTION_USER_PRESENT
意图。有关此帖子的更多信息:https://stackoverflow.com/a/4602341/2367998
我希望它能为你带来帮助!