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. SSH ProxyCommand

    简单的说就是SSH层面的代理服务器,实现通过跳板机执行SSH相关命令到目标机器的代理服务.

  2. IDisposable的另类用法

    IDisposable是.Net中一个很重要的接口,一般用来释放非托管资源,我们知道在使用了IDisposable的对象之后一定要调用IDisposable.Dispose()方法,或者使用.Net提 ...

  3. .net微信公众号开发——消息与事件

    作者:王先荣    本文介绍如何处理微信公众号开发中的消息与事件,包括:(1)消息(事件)概况:(2)验证消息的真实性:(3)解析消息:(4)被动回复消息:(5)发送其他消息.    开源项目地址:h ...

  4. plain framework 1 版本更新 1.0.2 增加打包插件

    由于个别因素,该框架的文档没有及时的更新到博客上,但是离线的文档已经完成.本次更新对框架来说显得比较重要,因为在文档的编写过程中经过再次的阅读代码修复了不少错误,最主要的是统一了整个框架的标准风格.对 ...

  5. velocity常用语句速查表

    velocity常用语句 * 变量定义 #set($directoryRoot = "www" ) * #if($!list.size() != 0) //判断list不为空 #f ...

  6. 【BZOJ】【1010】【HNOI2008】玩具装箱Toy

    DP/斜率优化 根据题目描述很容易列出动规方程:$$ f[i]=min\{ f[j]+(s[i]-s[j]+i-j-1-L)^2 \}$$ 其中 $$s[i]=\sum_{k=1}^{i} c[k] ...

  7. 常用mimetype

    $mimetypelist["csm"] = "application/cu-seeme";$mimetypelist["cu"] = &q ...

  8. python之SQLAlchemy ORM 上

    前言: SQLAlchmey是暑假学的,当时学完后也没及时写博客整理下.这篇博客主要介绍下SQLAlchemy及基本操作,写完后有空做个堡垒机小项目.下篇博客整理写篇关于Web框架和django基础~ ...

  9. .net 实现aop的三种方法。

    动态代理 透明代理 编译时注入

  10. mouseenter和mouseover的区别

    mouseover事件-不论鼠标指针穿过被选元素或其子元素,都会触发. mouseenter事件-只有在鼠标指针穿过被选元素时才会触发,对应事件为mouseleave. mouseout事件-不论鼠标 ...