您的位置:首页 > 移动开发

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("打开手势密码解锁接界面");
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐