一、实现app手势解锁
功能要求:手势解锁现在来说是一个比较容易实现的功能,但是在实现这个功能的时候要考虑几方面的因素。
具体功能点:
1.利用对屏幕开屏熄屏解锁监听,当手势解锁处于开启状态时,解锁屏幕后需要进行手势解锁才能进入app
2.手势解锁处于开启状态时,当app没有关闭的情况下进入后台返回到前台时,弹出手势解锁界面,解锁后回到之前的界面
我这里也是用的别人的手势解锁界面,所以我就这里不谈如何实现这个界面,我这里和大家分享的是如何控制这个界面的出现,具体的解释注释里写的很详细了,其他的就不在多做说明了。个人水平有限,有问题的地方大家多担待,欢迎指导。
实现方式:
1.编写广播类:这里实现的是整个跟手机屏幕相关的整套逻辑
/**
* 亮屏、熄屏、解锁广播 * Created by Administrator on 2016/12/20. */ public class ScreenBroadcastReceiver extends BroadcastReceiver { private final String TAG = "ScreenBroadcastReceiver"; @Override public void onReceive(final Context context, Intent intent) { String action = intent.getAction(); if (Intent.ACTION_SCREEN_ON.equals(action)) {//亮屏 // Log.e(TAG, "screen is on..."); } else if (Intent.ACTION_SCREEN_OFF.equals(action)) {//熄屏 // Log.e(TAG, "screen is off..."); } else if (Intent.ACTION_USER_PRESENT.equals(action)) {//解锁屏幕 // Log.e(TAG, "screen is unlock..."); boolean topActivity = isTopActivity(context);//应用是否处于前台 // Log.e(TAG, topActivity+"");
boolean gesture_status = SpUtils.getInstance(context).getBoolean("gesture_status", false);//手势解锁功能开启状态
String gesture_word = SpUtils.getInstance(context).getString("gesture_word", "");//手势密码
if (!gesture_status || gesture_word.equals("")) {//如果手势功能处于关闭状态或者没有获取存储的页面则不会进入手势解锁页面 return; }
if (topActivity) {
context.startActivity(new Intent(context, GestureVerifyActivity.class));//如果屏幕解锁时,应用处于前台则开启手势解锁页面 App.isActive = true; } } }
/**
* Application has been open and display. * * @param context * @return */ protected static boolean isTopActivity(Context context) { ActivityManager activityManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE); List<ActivityManager.RunningTaskInfo> tasksInfo = activityManager.getRunningTasks(1); if (tasksInfo.size() > 0) { //应用程序位于堆栈的顶层
if (PACKAGE_NAME.equals(tasksInfo.get(0).topActivity.getPackageName())) {//PACKAGE_NAME是我们的包名
String className = tasksInfo.get(0).topActivity.getClassName();//如果开启时是登录页面或者注册页面或者是手势编辑页面就返回false不让解锁页面弹出
if (className.equals(LoginActivity.class.getName()) ||
className.equals(RegActivity.class.getName()) || className.equals(GestureEditActivity.class.getName())) { return false; } return true; } } return false; }
}
|
这样在你要开启广播的点开启广播就好了,我是在登录之后的首页开启的哦。
IntentFilter filter = new IntentFilter();
filter.addAction(Intent.ACTION_SCREEN_OFF); filter.addAction(Intent.ACTION_SCREEN_ON); filter.addAction(Intent.ACTION_USER_PRESENT); //开启监听广播 screenBroadcastReceiver = new ScreenBroadcastReceiver();
registerReceiver(screenBroadcastReceiver, filter);
这是第一部分,还有一部分是App在后台进入前台时候的一套解锁页面的弹出逻辑,正在总结中,晚些时候会发出来,欢迎大家指导。
|