app切换到后台一分钟后锁定,需要输入手势密码才能打开(程序锁)

#app切换到后台一分钟后锁定,需要输入手势密码才能打开(程序锁)

解锁规则:

  1. 未设置解锁密码,则什么都不用输入即可进入应用
  2. 1分钟内再次回到应用,无需输入密码、手势密码等即可进入
  3. 超过1分钟后回到应用,需输入手势密码即可进入

涉及到的点:

  1. 手势密码
  2. 如何判断app切换到后台和切换到前台
  3. 时间点的把控
  4. 通过广播通知打开手势密码解锁界面

逐一突破:

  1. 手势密码用了开源的项目

    • https://github.com/sym900728/LockPattern
  2. 判断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");
			}
		});
  1. 时间点的把控
    1. 淘汰的想法:我开始想的是用服务,当app被切换到后台时候,开启服务计时,实现完毕后,觉得考虑到性能还有耗电量的问题,就放弃了
    2. 每当app切换到后台时候记录一个时间,当切换到前台时候,把当前时间和切换到后台时候记录的时间比较,这样来判断,具体参考上面代码中的
  2. 通过广播通知打开手势密码解锁界面
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("打开手势密码解锁接界面");
        }
    }
}

##demo下载地址
demo下载地址

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值