[源码]Android安卓应用手势锁图案解锁的实现

Posted asmcvc

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[源码]Android安卓应用手势锁图案解锁的实现相关的知识,希望对你有一定的参考价值。

交互细节

  • 用户首先使用账号/密码进行登录。
  • 登录成功后,判断是否是第一次登录使用,如果是第一次则显示创建手势密码的界面,要求用户创建手势锁。
  • 创建的过程中要求用户连接至少四个点,并且绘制两次以确认绘制正确并记住绘制的路径。确认成功后进入APP首页。
  • 用户在APP页面使用功能后,把APP退出到后台一定时间(超时),则下次再打开APP时弹出解锁页面,要求用户解锁,解锁成功进入APP页面。
  • APP完全退出,下次重新打开APP使用,如果登录账号有缓存登录有效状态并且未过期,则跳过用户账号登录页面进入手势解锁页面,如果登录状态失效则需要重新输入账号密码登录。
  • 用户连续解锁5次失败则进入账号密码登录页面,如果用户忘记手势密码也可以直接点击“忘记手势密码”通过重新登录账号密码来重新设置手势锁。

源码

源码地址:Android安卓应用手势锁图案解锁的实现源码 - 下载频道 - CSDN.NET
- 创建手势锁的代码见:CreateGestureActivity
- 解锁手势的代码见:UnlockGestureActivity
- 演示账号密码登录的页面:LoginActivity
- 演示APP的主界面:MainActivity

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:orientation="vertical"
    tools:context="com.example.lockdemo.view.MainActivity">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="24dp"
        android:text="网易易盾-应用加固服务" />
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="您身边的移动应用安全专家,用心为移动应用安全保驾护航" />
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="http://dun.163.com/product/app-protect" />
    <TextView
        android:layout_marginTop="40dp"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textSize="24dp"
        android:text="DEX加固\\nUnity3d脚本保护\\n防调试器\\nSO加密保护\\n防二次打包\\n内存防Dump保护" />
</LinearLayout>
  • 用户在APP页面使用功能后,把APP退出到后台一定时间(超时),则下次再打开APP时弹出解锁页面,要求用户解锁,解锁成功进入APP页面。主要在Application中实现,主要代码:
@Override
    public void onCreate() 
        super.onCreate();

        countActivedActivity = 0;
        mInstance = this;
        mSP = getSharedPreferences(Constant.CONFIG_NAME, MODE_PRIVATE);
        mLockPatternUtils = new LockPatternUtils(this);

        registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks() 
            @Override
            public void onActivityCreated(Activity activity, Bundle savedInstanceState) 

            

            @Override
            public void onActivityStarted(Activity activity) 
                if (countActivedActivity == 0 && mBackgroundEver == true) 
                    Log.v(TAG, "切到前台  lifecycle");
                    timeOutCheck(activity);
                
                countActivedActivity++;
            

            @Override
            public void onActivityResumed(Activity activity) 

            

            @Override
            public void onActivityPaused(Activity activity) 

            

            @Override
            public void onActivityStopped(Activity activity) 
                countActivedActivity--;
                if (countActivedActivity == 0) 
                    Log.v(TAG, "切到后台  lifecycle");
                    mBackgroundEver = true;

                    if (isAlpSwitchOn() == true) 
                        saveStartTime();
                    
                
            

            @Override
            public void onActivitySaveInstanceState(Activity activity, Bundle outState) 

            

            @Override
            public void onActivityDestroyed(Activity activity) 

            
        );
    

    public void timeOutCheck(Activity activity) 
        long endTime = System.currentTimeMillis();
        if (endTime - getStartTime() >= Constant.TIMEOUT_ALP * 1000) 
            Util.toast(this, "超时了,请重新验证");
            String alp = mSP.getString(Constant.ALP, null);
            if (TextUtils.isEmpty(alp) == false) 
                Intent intent = new Intent(this, UnlockGestureActivity.class);
                intent.putExtra("pattern", alp);
                intent.putExtra("login", false); //手势验证,不进行登录验证
                intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
                // 打开新的Activity
                activity.startActivityForResult(intent, Constant.REQ_COMPARE_PATTERN_TIMEOUT_CHECK);
            
        
    

    public void saveStartTime() 
        mSP.edit().putLong(Constant.START_TIME, System.currentTimeMillis()).commit();
    

    public long getStartTime() 
        long startTime = 0;
        try 
            startTime = mSP.getLong(Constant.START_TIME, 0);
         catch (Exception e) 
            startTime = 0;
        
        return startTime;
    

效果

  • 账号密码登录页面:

  • 创建手势锁:

  • 绘制第一遍手势路径:

  • 要求再次绘制解锁图案:

  • 进入APP主页面:

  • 进入手势解锁页面,要求用户解锁:

  • 当用户解锁失败时:

  • 连续5次解锁失败,要求重新登录:

参考

以上是关于[源码]Android安卓应用手势锁图案解锁的实现的主要内容,如果未能解决你的问题,请参考以下文章

android开发 怎样锁屏并设置解锁密码

天才程序员教你写一个手势就能解锁的控件!是不是非常神奇!

国产安卓手机全系通用刷机解锁BL锁-胎教级教程

Android进阶之自定义View实战九宫格手势解锁实现

[CQOI2018] 解锁屏幕

Android进阶之自定义View实战九宫格手势解锁实现