项目简介:

手机端编写屏保软件,利用蓝牙与蓝牙串口模块和指纹识别器组成的指纹采集、识别系统进行通信,从而获取用户指纹验证信息,

软件获取指纹识别器发送的验证结果,以决定是否允许用户解锁锁屏,进入手机主界面。

这很想iPone5s的TouchID,用户只需按下Home键,即可完成用户验证、解锁锁屏和进入主界面这个步骤,代替了传统的解锁方式:

首先按下Home键,然后输入4个数字,用以验证,其次进入主界面。传统解锁方式繁琐复杂,完成解锁需要五个操作:按Home键+4个数字。

而指纹识别解锁只需一个操作:按Home键。

这个想法是12年的冬天想到的,当时我正在宿舍门外用iPhone蹭网,每次解锁iPhone都要经历五个步骤,我感觉到很繁琐。

忽然,我想到了前两天从淘宝上看到的指纹识别器,忽然我就想,那我能不能模拟一下只按Home键即可解锁手机呢?正好当时

我们学校正在组织萌芽杯(就是大学内的科技制作等)比赛,我也早就和两位同学报名了萌芽杯,但是当时报名课题不是指纹一步解锁,

于是我们把课题换成了指纹一步解锁,我觉得这个意义很大,因为手机如果配备上指纹识别器后,将对于解锁和支付等需要密码验证的一类

服务产生巨大的影响。于是说做就做。

时隔一年多,温习一下指纹一步解锁项目。

项目各模块:

1、安卓智能手机

2、UART通信,TTL电平的光学指纹识别模块

3、蓝牙串口模块

4、USB转TTL模块(用电脑串口调试指纹识别器)

指纹识别器与USB转TTL模块连接图

电脑串口调试指纹模块图:

蓝牙串口模块与指纹识别模块连线图:

上图可以看到有一个单片机开发板,其实它没有什么作用,唯一的作用就是提供了蓝牙串口模块和指纹识别模块的电源。

利用手机端蓝牙串口调试软件对指纹识别器进行调试,检查是否连线正确

调试成功!

接着就开始写手机端的软件了。

以下为主要代码段:

package jeff.iphonelock;
import java.util.List;
import android.app.ActivityManager;
import android.app.Service;
import android.content.BroadcastReceiver;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.IBinder;
import android.util.Log;
import android.view.Gravity;
//蓝牙
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.UUID;
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothDevice;
import android.bluetooth.BluetoothSocket;
import android.widget.Toast;
public class MyLockScreenService extends Service {
private final String ACT_SCREEN_OFF = "android.intent.action.SCREEN_OFF";
private final String ACT_SCREEN_ON = "android.intent.action.SCREEN_ON";
public BluetoothAdapter mBluetoothAdapter = null;
public static BluetoothSocket btSocket = null;
public static OutputStream outStream = null;
//蓝牙通信类型:蓝牙串口
public static final UUID
MY_UUID = UUID.fromString("00001101-0000-1000-8000-00805F9B34FB");
public static String address = "00:15:FF:F3:B8:86"; // <==要连接的蓝牙设备MAC地址
int k=0,is=0,canfinish=0;
public static InputStream inStream = null;
Toast toast=null;
char  mes;
byte[] buffer=new byte[20];  // buffer store for the instream
//指纹识别器自动注册指令
static byte[] zhuce={(byte) 0xEF,(byte) 0x01,(byte) 0xFF,(byte) 0xFF,(byte) 0xFF,(byte)
0xFF,(byte) 0x01,(byte) 0x00,(byte) 0x03,(byte) 0x10,(byte) 0x00,(byte) 0x14};
//指纹识别器自动识别指令
static byte[] shibie={(byte) 0xEF,(byte) 0x01,(byte) 0xFF,(byte) 0xFF,(byte) 0xFF,(byte)
0xFF,(byte) 0x01,(byte) 0x00,(byte) 0x03,(byte) 0x11,(byte) 0x00,(byte) 0x15};
//指纹识别器删除指纹库内编号为0的指纹模板指令
static byte[] shanchu={(byte) 0xEF,(byte) 0x01,(byte) 0xFF,(byte) 0xFF,(byte) 0xFF,(byte)
0xFF,(byte) 0x01,(byte) 0x00,(byte) 0x07,(byte) 0x0C,(byte) 0x00,(byte) 0x00,(byte)
0x00,(byte) 0x01,(byte) 0x00,(byte) 0x15};
@Override
public IBinder onBind(Intent intent) {
// TODO Auto-generated method stub
Log.e("", "***********onBind MyLockScreenService");
return null;
}
@Override
public void onCreate() {
// TODO Auto-generated method stub
super.onCreate();
//建立蓝牙连接
mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
BluetoothDevice device = mBluetoothAdapter.getRemoteDevice(address);
try {
//约定蓝牙通信类型
btSocket = device.createRfcommSocketToServiceRecord(MY_UUID);
} catch (IOException e) {
DisplayToast("套接字创建失败!");
onDestroy();
}
mBluetoothAdapter.cancelDiscovery();
try {
//建立蓝牙通信通道
btSocket.connect();
DisplayToast("蓝牙连接成功!");
} catch (IOException e) {
try {
btSocket.close();
DisplayToast("蓝牙连接没有建立!");
onDestroy();
} catch (IOException e2) {
DisplayToast("连接没有建立,无法关闭套接字!");
onDestroy();
}
}
// register Broadcast
//IntentFilter Filter= new IntentFilter(ACT_SCREEN_OFF);
//registerReceiver(ScreenBCR, Filter);
IntentFilter intentFilter= new IntentFilter(ACT_SCREEN_ON);
registerReceiver(mScreenBCR, intentFilter);
}
private void finish() {
// TODO Auto-generated method stub
}
@Override
public void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
try {
btSocket.close();
DisplayToast("已断开蓝牙连接!");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
unregisterReceiver(mScreenBCR);
}
//接收到Screen_ON 事件:
private BroadcastReceiver mScreenBCR = new BroadcastReceiver() {
@SuppressWarnings("deprecation")
@Override
public void onReceive(Context context, Intent intent) {
// TODO Auto-generated method stub
Log.e("", "***********onReceive Intent="+intent);
//蓝牙发送数据
//is判断是否锁屏
is=0;
try {
//获取输出数据流
outStream = btSocket.getOutputStream();
} catch (IOException e2) {
// TODO Auto-generated catch block
e2.printStackTrace();
}
try {
//获取输入数据流
inStream=btSocket.getInputStream();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
try {
//发送指令给指纹识别器
outStream.write(shibie);
while(true){
try {
if((k=inStream.read(buffer))!=-1){
//蓝牙串口返回数据为16个字节,避免数据传送阻塞,造成接收错误
while(k!=16)
k+=inStream.read(buffer,k,16-k);
//调试用,查看接收数据字节数
//mes=(char) (k+48);
//buffer[9]为指纹识别器通过蓝牙串口传回的确认码
if(buffer[9]!=0){
if(buffer[9]==2) DisplayToast("未录入指纹!");
else if(buffer[9]==9) DisplayToast("指纹不匹配!");
else DisplayToast("指纹有误!");
is=0;
}// endif
else{
DisplayToast("成功!");
//关闭锁屏
is=1;
if(canfinish==1)
DrawLockScreen.mParentActivity.finish();
}
break;
}  //endif
} catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}//endwhile
}//endtry
catch (IOException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
//指纹识别不匹配或不成功时,开启锁屏
if(is==0){
//开启锁屏
Intent i = new Intent();
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
i.setClass(context, IPhoneLock.class);
context.startActivity(i);
canfinish=1;//是否可以启用DrawLockScreen.mParentActivity.finish();
}
} //EndonReceive
};//End——BroadcastReceiver
//显示提示内容
public void DisplayToast(String str)
{
if (toast == null)
{
toast=Toast.makeText(this, str, Toast.LENGTH_SHORT);
}
else
{
//当另一个显示内容出现时,立即关闭当前显示,避免“大排队”
toast.cancel();
toast.setText(str);
}
toast.setGravity(Gravity.TOP, 0, 220);
toast.show();
}
}//End_MyLockScreenService;

通过指纹识别模块验证用户,解锁手机相关推荐

  1. 【雕爷学编程】Arduino动手做(141)---AS608光学指纹识别模块

    37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的.鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为 ...

  2. vnr光学识别怎么打开_干货|指纹锁的指纹识别模块的前世今生,智能锁的指纹识别到底有多智能?...

    智能锁现在也有很多叫法:指纹锁.电子锁.可见指纹识别是智能锁的核心功能了,那我们今天来聊聊智能锁的指纹识别模块. 指纹识别的历史 指纹识别认证的流程 指纹识别技术的种类 指纹识别的历史 早在2000多 ...

  3. YH-AS608指纹识别模块介绍

    前言 自小刺头深草里,而今渐觉出蓬蒿. 时人不识凌云木,直待凌云始道高.----杜荀鹤<小松> 一.YH-AS608简介 YH-AS608 是野火设计的高性能光学指纹识别模块.它采用了杭州 ...

  4. atk301指纹识别模块-stm32-串口实现

    连接 1.ATK-301 电容 指纹识别模块简介 ATK-301 电容 指纹识别模块(以下简称 LB301 模块)是 ALIENTEK 推出的一款高性 能的电容半导体指纹识别模块.LB301 采用了瑞 ...

  5. 设置指纹识别模块分析

    设置指纹识别模块分析 一,   指纹项的加载 首先我们从指纹项的布局加载开始分析,从手机设置下边直观的可以发现,指纹项是放在二级菜单安全菜单里边的,下面我们就从代码里边分析一下,指纹项是如何被加载进来 ...

  6. 硬件速攻-AS608指纹识别模块

    简介 AS608指纹识别模块是一种小型化.低功耗.高精度的指纹识别模块.它采用了高速DSP处理器和先进的算法,可以快速.准确地完成指纹图像的采集和识别. 这个指纹识别模块内部集成了指纹传感器.处理器. ...

  7. 基于STM32单片机光学指纹识别模块(FPM10A)全教程(基于C语言)

    本文转载,其来源在参考中:1,稍加修改,因为近期使用到这个模块,故而加以整理! 1.平台 首先我使用的是 奋斗 STM32 开发板 MINI板 基于STM32单片机光学指纹识别模块(FPM10A)全教 ...

  8. 51驱动AS608光学指纹识别模块 12864显示

    51驱动AS608光学指纹识别模块 12864显示 AS608光学指纹识别模块 模块工作原理 1.指纹特征 2.指纹处理 模块参数 引脚说明 实验程序 硬件设备和接线 程序讲解 按键 主函数 实验步骤 ...

  9. AS608指纹识别模块+STM32实现指纹录入

    视频演示 d9148ed412b24119db81eef6c2c8e9ec 1.特性参数 (资料来自ALIENTEK文档) ATK-AS608 指纹识别模块是 ALIENTEK 推出的一款高性能的光学 ...

最新文章

  1. python50种算法_收藏 | 一文洞悉Python必备50种算法(附解析)
  2. 模型评估——ROC、KS
  3. Mysql优化原则_小表驱动大表IN和EXISTS的合理利用
  4. Android屏幕信息获取
  5. 牛客网_PAT乙级_1025插入与归并(25)
  6. mysql动态配置数据源_Spring整合Mybatis实现动态数据源切换教程配置
  7. html5 应用框架,基于HTML5移动应用框架的研究及应用
  8. c创建python虚拟机_cpython大致数据结构实现笔记
  9. 为什么我的U盘传到一半速度会变成0然后过一会儿才回继续
  10. 2011-08-15 “can’t create transaction lock on /v...
  11. SRM 574 DIV1 L2
  12. java 打印素数_Java 素数打印
  13. html5 plus 图片下载保存到手机相册
  14. 百度网盘打开显示读写权限不足
  15. 计算机页码格式罗马数字,word 页码 罗马数字怎么从1开始
  16. YOLO版本不兼容,报错AttributeError: Can’t get attribute ‘SPPF’ on <module ‘models.common’
  17. 快速学习-Saturn作业编排
  18. 6种方法计算神经网络参数量Params、计算量FLOPs、Macs简单代码
  19. Halcon面阵相机采像
  20. 问卷调查小程序功能清单

热门文章

  1. Java程序设计---实验4
  2. 计算机服务里wlan功能是什么意思,移动wlan什么意思
  3. php怎么比较数组长度_PHP中如何获取数组的长度
  4. VOJ - Did he drop any good loot? (三维DP)
  5. hive中order by详解
  6. 一个for循环打印九九乘法表
  7. 量化交易总结--zipline
  8. 手机中的权限安全,你知道吗?
  9. 探索工业互联网领域中的设备通信协议
  10. Python 快速排序,代码实现