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 ...
随机推荐
- C# Web应用调试开启外部访问
在用C#开发Web应用时有个痛点,就是本机用VS开启Web应用调试时外部机器无法访问此Web应用.这里将会介绍如何通过设置允许局域网和外网机器访问本机的Web应用. 目录 1. 设置内网访问 2. 设 ...
- 奇异值分解(SVD)原理与在降维中的应用
奇异值分解(Singular Value Decomposition,以下简称SVD)是在机器学习领域广泛应用的算法,它不光可以用于降维算法中的特征分解,还可以用于推荐系统,以及自然语言处理等领域.是 ...
- 记一次SQLServer的分页优化兼谈谈使用Row_Number()分页存在的问题
最近有项目反应,在服务器CPU使用较高的时候,我们的事件查询页面非常的慢,查询几条记录竟然要4分钟甚至更长,而且在翻第二页的时候也是要这么多的时间,这肯定是不能接受的,也是让现场用SQLServerP ...
- WCF学习之旅—第三个示例之四(三十)
上接WCF学习之旅—第三个示例之一(二十七) WCF学习之旅—第三个示例之二(二十八) WCF学习之旅—第三个示例之三(二十九) ...
- 04.SQLServer性能优化之---读写分离&数据同步
汇总篇:http://www.cnblogs.com/dunitian/p/4822808.html#tsql 过段时间再继续写文章吧,本来准备把SQLServer一个系列写完的,最近状态很差很不好, ...
- JavaScript 自定义对象
在Js中,除了Array.Date.Number等内置对象外,开发者可以通过Js代码创建自己的对象. 目录 1. 对象特性:描述对象的特性 2. 创建对象方式:对象直接量.new 构造函数.Objec ...
- 前端学Markdown
前面的话 我个人理解,Markdown就是一个富文本编辑器语言,类似于sass对于css的功能,Markdown也可以叫做HTML预处理器,只不过它是一门轻量级的标记语言,可以更简单的实现HTML ...
- 两个 viewports 的故事-第二部分
原文链接:A tale of two viewports — part two 译者:nzbin 在这个迷你系列中,我将解释 viewports 和各种重要元素的宽度是如何工作的,比如说 <ht ...
- 浏览器中用JavaScript获取剪切板中的文件
本文转自我的个人网站 , 原文地址:http://www.zoucz.com/blog/2016/01/29/get-file-from-clipboard/ ,欢迎前往交流讨论 在网页上编辑内容 ...
- 自己实现简单Spring Ioc
IoC则是一种 软件设计模式,简单来说Spring通过工厂+反射来实现IoC. 原理简单说明: 其实就是通过解析xml文件,通过反射创建出我们所需要的bean,再将这些bean挨个放到集合中,然后对外 ...