app切换到后台一分钟后锁定,需要输入手势密码才能打开(程序锁)
2016-11-18 11:05
211 查看
app切换到后台一分钟后锁定,需要输入手势密码才能打开(程序锁)
解锁规则:未设置解锁密码,则什么都不用输入即可进入应用
分钟内再次回到应用,无需输入密码、手势密码等即可进入
超过1分钟后回到应用,需输入手势密码即可进入
涉及到的点:
手势密码
如何判断app切换到后台和切换到前台
时间点的把控
通过广播通知打开手势密码解锁界面
逐一突破:
手势密码用了开源的项目
https://github.com/sym900728/LockPattern
判断app是否切换到后台和前台
//应用前后台切换的判断 registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks() { @Override public void onActivityStopped(Activity activity) { Log.v("viclee", activity + "onActivityStopped"); count--; if (count == 0) { timeStart = new Date().getTime(); Logger.d("切到后台-->"+timeStart); } } @Override public void onActivityStarted(Activity activity) { Log.v("viclee", activity + "onActivityStarted"); if (count == 0) { Logger.d("切到前台"); long timeEnd = new Date().getTime(); Logger.d("时间差"+(timeEnd-timeStart)); //切换到前台和切换到后台的时间差大于等于10s if(!isLock&&BaseApplication.isPassportLogin&&timeStart!=0&&timeEnd-timeStart>=1000*60){ isLock = true;//app被锁 Intent receiver = new Intent(); receiver.setAction("GO_LOGIN"); sendBroadcast(receiver); } } count++; } @Override public void onActivitySaveInstanceState(Activity activity, Bundle outState) { // Logger.d("onActivitySaveInstanceState"); } @Override public void onActivityResumed(Activity activity) { // Logger.d("onActivityResumed"); } @Override public void onActivityPaused(Activity activity) { // Logger.d("onActivityPaused"); } @Override public void onActivityDestroyed(Activity activity) { // Logger.d("onActivityDestroyed"); } @Override public void onActivityCreated(Activity activity, Bundle savedInstanceState) { // Logger.d("onActivityCreated"); } });
时间点的把控
淘汰的想法:我开始想的是用服务,当app被切换到后台时候,开启服务计时,实现完毕后,觉得考虑到性能还有耗电量的问题,就放弃了
每当app切换到后台时候记录一个时间,当切换到前台时候,把当前时间和切换到后台时候记录的时间比较,这样来判断,具体参考上面代码中的
通过广播通知打开手势密码解锁界面
public class ForegroundTaskReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { //切换到前台了 if(intent.getAction().equals("GO_LOGIN")){ watchStack(); } } /** * 监控任务栈 */ public void watchStack() { byte[] getsurePassword = ACache.getInstance(BaseApplication.getContext()).getAsBinary(SPUtils.getString(BaseApplication.getContext(), "phone", "")); //有手势密码 && 超过1分钟 if (getsurePassword != null && getsurePassword.length > 0) { Intent intent = new Intent(BaseApplication.getContext(), LockHandPasswordLoginActivity.class); // 服务或广播中打开Activity,需要设置此参数 intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); BaseApplication.getContext().startActivity(intent); Logger.d("打开手势密码解锁接界面"); } } }
相关文章推荐
- [置顶] 利用ActivityLifecycleCallBack监控app前后台状态切换,实现手势密码即九宫格解锁
- 对于连接后,需要打开浏览器输入用户名密码才能上网的WIFI,不跳转的解决方法
- 仿QQ黑屏,锁屏,程序切换之后的手势密码锁定,加强版
- app从后台切换到前台 验证手势密码
- Windows8系统中两种设置需要输入密码才能唤醒睡眠中的电脑方法介绍
- 您需要安装旧 Java SE 6 运行环境才能打开“xxx.app”
- Linux下后台程序完成自动输入密码等交互行为的例子
- 装了ie7之后,每次打开iis网站都要输入密码。怎么样弄才能不输入密码?
- 输入密码时提示大写锁定已打开
- [Android开发] 从后台恢复前台界面需要输入密码的demo|监听Home短按长按锁屏
- windows 7 打开sharepoint 2007上的office文档需要输入用户名和密码
- Android 如何保证App切换到后台,或页面跳转后,重新打开APP、或返回之前页面时,维持其状态不变
- 自定义VIew之APP常用手势密码对程序加锁,解锁控件
- 以不同用户身份运行程序,/savecred只需要输入一次密码(GetTokenByName取得EXPLORER.EXE的令牌,然后调用CreateProcessAsUser,而且使用LoadUserProfile解决另存文件的问题)good
- 解决莫名其妙的打开网站需要输入用户名密码
- OSX10.10系统下AICS6您需要安装旧 Java SE 6 运行环境才能打开程序
- mac下需要安装旧 Java SE 6 才能打开程序解决办法
- Linux下后台程序完成自动输入密码等交互行为的例子
- Android APP 进入后台开启手势密码页面
- ubuntu杂谈(五)----- 开机自启动某个后台程序的方法,免输入密码