Android6.0及以上系统支持指纹识别解锁功能:项目中用到,特此抽离出来,备忘。

功能是这样的:在用户将app切换到后台运行(超过一定的时长,比方说30秒),再进入程序中的时候就会弹出指纹识别的界面。用户输入指纹,解锁成功。指纹识别的模块其实很简单啦,google的api已经封装好了,我们只需要学会调用就ok了。

思路:

在用户将程序切换到后台的时候需要有一个方法计时,这样的方法写在哪里呢,对,要写在service中。在Activity中开启服务:

Intent intent = new Intent("com.example.fingureprint.services.JudgeFingureService");
        intent.setPackage(getPackageName());
        startService(intent);

intent.setpackage(getPackageName);在6.0及以上系统中启动服务必须加上这句。

服务不要忘记在清单文件中注册幺。

 <!--注册判断指纹密码开启的服务-->
        <service
            android:name="com.example.fingureprint.services.JudgeFingureService"
            android:enabled="true">
            <intent-filter >
                <action android:name="com.example.fingureprint.services.JudgeFingureService"/>
            </intent-filter>
        </service>

在服务中onStart()开启一个线程:

new Thread(){
            public void run() {
                try {
                    while(true){
                    Thread.sleep(1000);
                    if(isAppOnForeground()){
                        Log.i("前台运行", "time"+countnumber);
                        if(countnumber>30){
                            if(!"com.example.fingureprint.FingureAriseActivity".equals(listActivity())){
                                Intent myintent = new Intent();
                                myintent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
                                myintent.setClass(getApplicationContext(),FingureAriseActivity.class);
                                startActivity(myintent);
                            }
                            countnumber = 0;
                        }else{
                            countnumber = 0;
                        }
                    }else{
                        Log.i("后台运行", "time"+countnumber);
                        countnumber ++;
                    }
                    }

                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            };

        }.start();

计时用了个while死循环,让thread睡一秒。哈哈,没有用Handler是不是很简单。

判断程序是否在后台运行:

    /**
     * 判断程序在前台运行的方法
     * @return
     */
    public boolean isAppOnForeground() {
        ActivityManager systemService = (ActivityManager) this.getSystemService(Context.ACTIVITY_SERVICE);
        List<RunningAppProcessInfo> runningAppProcesses = systemService.getRunningAppProcesses();
        if(runningAppProcesses==null) return false;
        for(RunningAppProcessInfo processes: runningAppProcesses){
            if(processes.processName.equals("com.example.fingureprint")&&processes.importance==RunningAppProcessInfo.IMPORTANCE_FOREGROUND){
                return true;
            }
        }
        return false;
    }

有一个小细节,当用户从后台切换到前台,但是用户没有解锁,又切换到后台,过三十秒后切换到前台,这时候不能再跳出手势解锁界面了吧。

解决:1.设置下手势界面的启动方式。2.检测程序的当前运行界面。

    /**
     * 判断当前运行在前台的Activity
     */
    @SuppressWarnings("deprecation")
    public  String listActivity(){
        ActivityManager systemService = (ActivityManager) this.getSystemService(Context.ACTIVITY_SERVICE);
        List<RunningTaskInfo> runningTasks = systemService.getRunningTasks(1);
        RunningTaskInfo runningTaskInfo = runningTasks.get(0);
        ComponentName component = runningTaskInfo.topActivity;
        String className = component.getClassName();
        return className;
    }

下面讲一下指纹识别的api:在6.0及以上的v4包下:

需要在清单文件中添加权限:

<uses-permission android:name="android.permission.USE_FINGERPRINT"/>

用到的类有 FingerprintManagerCompat,此类中的api可以检测您的手机是否有指纹传感器,手机有没有录入过指纹。

AuthenticationCallback,可以继承此类,分别重写里面的方法,用来接收指纹识别的结果:

具体的可以下载下面的demo.

地址:https://github.com/reachchen/Finger-identification.git

Android指纹解锁的更多相关文章

  1. Android 指纹认证

    安卓指纹认证使用智能手机触摸传感器对用户进行身份验证.Android Marshmallow(棉花糖)提供了一套API,使用户很容易使用触摸传感器.在Android Marshmallow之前访问触摸 ...

  2. 基于 LocalAuthentication 框架的指纹解锁

    效果 想必大家对 iPhone 的指纹解锁功能已经相当的熟悉了.来看看效果吧! Local Authentication 概述 Local Authentication 框架提供了按照指定的安全策略请 ...

  3. iOS 指纹解锁

    目前常用的App支持指纹解锁的还不是很多,如果在你的项目中用一下是不是显得高大上呢? 废话不说多,干货- 1.在工程中添加LocalAuthentication.framework 2.在需要验证的c ...

  4. iOS9 集成指纹解锁

    添加依赖库 LocalAuthentication.framework #import <LocalAuthentication/LocalAuthentication.h> // 头文件 ...

  5. Android指纹识别深入浅出分析到实战(6.0以下系统适配方案)

    指纹识别这个名词听起来并不陌生,但是实际开发过程中用得并不多.Google从Android6.0(api23)开始才提供标准指纹识别支持,并对外提供指纹识别相关的接口.本文除了能适配6.0及以上系统, ...

  6. 计算Android屏幕解锁组合数

    晚饭时和同事聊到安卓屏幕解锁时会有多少种解锁方案,觉得很有趣,吃完饭开始想办法解题,花了大概2个小时解决.思路如下: 使用索引值0-9表示从左到右.从上到下的9个点,行.列号很容易从索引值得到: 使用 ...

  7. iOS开发之指纹解锁

    http://blog.csdn.net/hongfengkt/article/details/49868073 前一阵子一直在赶项目进度,没有太多时间写博客,现在终于空闲了,将以前欠下的博客补上来. ...

  8. iOS手势解锁、指纹解锁--Swift代码

    一.手势密码 1. 1.1.用UIButton组成手势的节点. 1.2.当手指接触屏幕时,调用重写的 touchesBegan:withEvent方法(在touchesBegan里调用setNeeds ...

  9. Touch ID指纹解锁使用

    Touch ID是iPhone5S后加入的一项新的功能,也就是大家熟知的指纹识别技术.大家用得最多的可能是手机的解屏操作,不用在和以前一样输入手机的四位数密码进行验证.一方面不用担心密码被别人看到,另 ...

随机推荐

  1. OSGi 基本原理

    定义 OSGi(Open Service Gateway Initiative)技术是面向Java的动态模型系统. 这个框架实现了一个优雅.完整和动态地组价模型.应用程序(称为bundle)无序重新引 ...

  2. linux升级openssl

    wget https://www.openssl.org/source/openssl-1.0.2j.tar.gz ./config shared zlib-dynamicconfig完成后执行 ma ...

  3. Three.js typescript definitely typed 文件

    最近学习three.js,想用typescript编写代码,去http://definitelytyped.org/找了一圈没有发现three.js的definitely typed文件. 好吧,花了 ...

  4. PHP面向对象中的重要知识点(一)

    1. __construct: 内置构造函数,在对象被创建时自动调用.见如下代码: <?php class ConstructTest { private $arg1; private $arg ...

  5. 框架--NoHttp和OkHttp哪个好用,Volley和NoHttp哪个好用?

    NoHttp和OkHttp哪个好用,Volley和NoHttp哪个好用? NoHttp 源码及Demo托管在Github欢迎大家Star: https://github.com/Y0LANDA/NoH ...

  6. CoreAnimation-08-CATransition

    概述 简介 CATransition又称转场动画,是CAAnimation的子类,可以直接使用 转场动画主要用于为图层提供移入/移出屏幕的动画效果 转场动画常见的应用是UINavigationCont ...

  7. 《GK101任意波发生器》升级固件发布(版本:1.0.1build803)

    一.固件说明: 硬件版本:0,logic.3 固件版本:1.0.1.build803 编译日期:2014-08-06 ====================================== 二. ...

  8. window操作技巧

    word中符号替换 1. 在网页复制内容时,下箭头用"^l"表示(字母L小写),回车用"^p"表示,可用替换命令全局替换(ctrl+f). 2. 添加底纹菜单在 ...

  9. while((c = getchar()) != EOF)(键盘输入问题)

    问题描述: 样例输入:O S 样例输出:I A 代码实现: #include <stdio.h> char *s = "`1234567890-=qwertyuiop[]\\as ...

  10. 用C语言实现的扑克牌洗牌程序

    一副牌:54张 从0开始排序: 0-12表示黑桃   A 1,2,3,... 10,J,Q,K 13-25表示红桃 A 1,2,3,... 10,J,Q,K 26-38表示草花 A 1,2,3,... ...