Android指纹解锁
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指纹解锁的更多相关文章
- Android指纹识别API讲解,让你有更好的用户体验
我发现了一个比较怪的现象.在iPhone上使用十分普遍的指纹认证功能,在Android手机上却鲜有APP使用,我简单观察了一下,发现Android手机上基本上只有支付宝.微信和极少APP支持指纹认证功 ...
- android指纹识别认证实现
Android从6.0系统支持指纹认证功能 启动页面简单实现 package com.loaderman.samplecollect.zhiwen; import android.annotation ...
- Android 指纹认证
安卓指纹认证使用智能手机触摸传感器对用户进行身份验证.Android Marshmallow(棉花糖)提供了一套API,使用户很容易使用触摸传感器.在Android Marshmallow之前访问触摸 ...
- 基于 LocalAuthentication 框架的指纹解锁
效果 想必大家对 iPhone 的指纹解锁功能已经相当的熟悉了.来看看效果吧! Local Authentication 概述 Local Authentication 框架提供了按照指定的安全策略请 ...
- iOS 指纹解锁
目前常用的App支持指纹解锁的还不是很多,如果在你的项目中用一下是不是显得高大上呢? 废话不说多,干货- 1.在工程中添加LocalAuthentication.framework 2.在需要验证的c ...
- iOS9 集成指纹解锁
添加依赖库 LocalAuthentication.framework #import <LocalAuthentication/LocalAuthentication.h> // 头文件 ...
- iOS 指纹解锁 验证TouchID
iOS指纹解锁 1.首先,引入依赖框架 LocalAuthentication.framework #import <LocalAuthentication/LocalAuthenticatio ...
- iOS --- Touch ID指纹解锁
https://www.cnblogs.com/ljmaque/p/TouchID.html 最近在项目中刚好用到了TouchId指纹解锁功能,之前也没有接触过,立马百度看看究竟是要如何使用,发现其实 ...
- TouchID 指纹解锁
概述 TouchID 指纹解锁 详细 代码下载:http://www.demodashi.com/demo/10701.html 一.软硬件支持 指纹验证功能的最低硬件支持为iPhone5s, iPa ...
随机推荐
- Jenkins 安装的HTML Publisher Plugin 插件无法展示ant生成的JunitReport报告
最近在做基于jenkins ant junit 的测试持续集成,单独ant junit生成的junitreport报告打开正常,使用Jenkins的HTML Publisher Plugin 插件无 ...
- ES6模块import细节
写在前面,目前浏览器对ES6的import支持还不是很好,需要用bable转译. ES6引入外部模块分两种情况: 1.导入外部的变量或函数等: import {firstName, lastName, ...
- TSQL Identity 用法全解
Identity是标识值,在SQL Server中,有ID列,ID属性,ID值,ID列的值等术语. Identity属性是指在创建Table时,为列指定的Identity属性,其语法是:column_ ...
- C#多线程之线程池篇3
在上一篇C#多线程之线程池篇2中,我们主要学习了线程池和并行度以及如何实现取消选项的相关知识.在这一篇中,我们主要学习如何使用等待句柄和超时.使用计时器和使用BackgroundWorker组件的相关 ...
- 【转】39个让你受益的HTML5教程
闲话少说,本文作者为大家收集了网上学习HTML5的资源,期望它们可以帮助大家更好地学习HTML5. 好人啊! 不过,作者原来说的40个只有39个,因为第5个和第8个是重复的. 原文在此! 1. 五分钟 ...
- 用游标实现查询当前服务器所有数据库所有表的SQL
declare @name varchar(100) DECLARE My_Cursor CURSOR --定义游标 FOR (SELECT Name FROM Master..SysDatabase ...
- CSS 3 学习——渐变
通过CSS渐变创建的是一个没有固定比例和固定尺寸的<image>类型,也就是说是一张图片,这张图片的尺寸由所应用的元素的相关信息决定.凡是支持图片类型的CSS属性都可以设置渐变,而支持颜色 ...
- Java列表
Java列表踩过的坑 其中subList是RandomAccessSubList,不是序列化的列表,不可以加入tair. 加入tair测试代码 @Autowired private CacheMana ...
- 如何给FineReport设置自定义消息提醒工具
FineReport设计器有自动的消息推送功能,可设置报表定时推送和常规的日报周报推送.官方有自己的消息推送的接口,不过有些用户旺旺希望自己开发,符合自己需求的推送界面. 下面这个方案就从逻辑层面简单 ...
- innodb 自增列重复值问题
1 innodb 自增列出现重复值的问题 先从问题入手,重现下这个bug use test; drop table t1; create table t1(id int auto_increment, ...