指纹识别入门(1)

原创 2017年03月10日 09:30:54

项目需要实现指纹登录。现弄一个能跑的案例:

开发工具:Android studio 

需要注意以下几点:

1 判断设备的API是否大于22,

2.是否有指纹识别模块,

3.判断设备是否设置了锁屏密码,

4.是否录入指纹


添加权限:

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

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


第二步:界面:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"

    tools:context="com.cordovatest.shanghai.figuretest4.MainActivity">

    <ImageView
        android:id="@+id/image"
        android:src="@drawable/fingerprint_"
        android:layout_width="80dp"
        android:layout_marginTop="100dp"
        android:layout_gravity="center_horizontal"
        android:layout_height="80dp"
         />
    <TextView
        android:id="@+id/start_tv"
        android:layout_width="100dp"
        android:text="开始"
        android:textSize="18sp"
        android:layout_marginTop="30dp"
        android:gravity="center"
        android:layout_gravity="center_horizontal"
        android:background="@color/colorPrimary"
        android:layout_height="50dp" />
    <TextView
        android:id="@+id/cancel_tv"
        android:layout_width="100dp"
        android:text="取消"
        android:background="@color/colorPrimary"
        android:textSize="18sp"
        android:layout_marginTop="30dp"
        android:gravity="center"
        android:layout_gravity="center_horizontal"
        android:layout_height="50dp" />
</LinearLayout>


第三步:Activity

package com.cordovatest.shanghai.figuretest4;


import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;


import android.Manifest;
import android.annotation.TargetApi;
import android.app.KeyguardManager;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.hardware.fingerprint.FingerprintManager;
import android.os.Build;
import android.os.CancellationSignal;
import android.support.v4.app.ActivityCompat;
import android.view.View;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;




@TargetApi(Build.VERSION_CODES.M)
public class MainActivity extends AppCompatActivity implements View.OnClickListener{


    private FingerprintManager manager;//访问指纹硬件的类
    private KeyguardManager keyManager;//管理锁屏的类
    private CancellationSignal signal = new CancellationSignal();
    //此类基于Java加密API的一个包装类,用于防止在指纹扫描中被第三方恶意攻击
    private FingerprintManager.CryptoObject cryptoObject;
    private static final int REQUST_CODE=1;
    private ImageView image;
    private String minSdkVersion;
    private  int i=0;
    private TextView start_tv;
    private TextView cancel_tv;






    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        image= (ImageView) findViewById(R.id.image);
        start_tv = (TextView) findViewById(R.id.start_tv);
        cancel_tv = (TextView) findViewById(R.id.cancel_tv);
        start_tv.setOnClickListener(this);
        cancel_tv.setOnClickListener(this);


        minSdkVersion= Build.VERSION.SDK;


    }


    private void initLowSDK() {
        Toast.makeText(getBaseContext(), "目前指纹识别只支持6.0以上的系统哦!", Toast.LENGTH_LONG).show();
    }


    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        if(requestCode==REQUST_CODE && resultCode==RESULT_OK){
            Toast.makeText(getBaseContext(), "识别成功!", Toast.LENGTH_SHORT).show();
            image.setImageResource(R.drawable.fingerprint_);
        }else{
            Toast.makeText(getBaseContext(), "识别失败!", Toast.LENGTH_SHORT).show();
        }
    }






    /**
     * 获得系统服务对象的引用
     */
    private void initFinger() {
        //通过V4包获得对象
        manager = (FingerprintManager) getSystemService(Context.FINGERPRINT_SERVICE);
        keyManager= (KeyguardManager) getSystemService(Context.KEYGUARD_SERVICE);


    }
    @TargetApi(Build.VERSION_CODES.M)
    private boolean isFingerprint(){
        //此方法为了保证判断是否支持支持指纹不报错
        if (ActivityCompat.checkSelfPermission(this, Manifest.permission.USE_FINGERPRINT) != PackageManager.PERMISSION_GRANTED) {
            Toast.makeText(getBaseContext(), "没有指纹解锁的权限", Toast.LENGTH_SHORT).show();
            return false;
        }
        //硬件设备是否支持指纹解锁功能
        if (!manager.isHardwareDetected()) {
            Toast.makeText(getBaseContext(), "该手机不支持指纹解锁", Toast.LENGTH_SHORT).show();
            return false;
        }
        //判断是否有锁屏密码
        if(!keyManager.isKeyguardSecure()){
            Toast.makeText(getBaseContext(), "请设置锁屏密码", Toast.LENGTH_SHORT).show();
            return false;
        }
        //判断是否录入指纹
        if (!manager.hasEnrolledFingerprints()) {
            Toast.makeText(getBaseContext(), "没有录入指纹", Toast.LENGTH_SHORT).show();
            return false;
        }
        return true;
    }


    /**
     * 开始指纹识别
     */
    private void startListen() {
        if (ActivityCompat.checkSelfPermission(this, Manifest.permission.USE_FINGERPRINT) != PackageManager.PERMISSION_GRANTED) {
            return;
        }
        FingerprintManager.AuthenticationCallback callBack=new FingerprintManager.AuthenticationCallback() {
            @Override
            public void onAuthenticationError(int errorCode, CharSequence errString) {
                super.onAuthenticationError(errorCode, errString);
                Toast.makeText(getBaseContext(), "操作过于频繁,请稍后再试",Toast.LENGTH_SHORT).show();
            }


            @Override
            public void onAuthenticationHelp(int helpCode, CharSequence helpString) {
                super.onAuthenticationHelp(helpCode, helpString);
            }


            //指纹识别成功
            @Override
            public void onAuthenticationSucceeded(FingerprintManager.AuthenticationResult result) {
                super.onAuthenticationSucceeded(result);
                Toast.makeText(getBaseContext(), "指纹识别成功",Toast.LENGTH_SHORT).show();
                image.setImageResource(R.drawable.fingerprint_);
            }


            //指纹识别失败
            @Override
            public void onAuthenticationFailed() {
                super.onAuthenticationFailed();
                Toast.makeText(getBaseContext(), "指纹识别失败", Toast.LENGTH_SHORT).show();
                i++;
                if(i==3){
                    Toast.makeText(getBaseContext(), "失败次数过多,请输入锁屏密码", Toast.LENGTH_SHORT).show();
                    showLockScreenPass();
                    i=0;
                }
            }
        };
        manager.authenticate(cryptoObject, signal, 0, callBack, null);


    }
    //取消指纹识别
    public void stopListening() {
        if (signal != null) {
           // selfCancelled = true;
            signal.cancel();
            signal = null;
            Toast.makeText(getBaseContext(), "您已经取消指纹识别", Toast.LENGTH_SHORT).show();
        }
    }


    /**
     *指纹识别错误次数过多,显示手机锁屏密码
     */
    private void showLockScreenPass() {
        Intent intent=keyManager.createConfirmDeviceCredentialIntent("finger","开启锁屏密码");
        if(intent!=null){
            startActivityForResult(intent, REQUST_CODE);
        }
    }


    @Override
    public void onClick(View view) {
        int id = view.getId();
        switch (id){
            case R.id.start_tv:
                if(Double.parseDouble(minSdkVersion)>=23) {
                    initFinger();
                    if (isFingerprint()) {
                        startListen();
                    }
                }else{
                    initLowSDK();
                }
                break;
            case R.id.cancel_tv:
                stopListening();
                break;
            default:
                break;




        }
    }
}



参考:http://blog.csdn.net/huiling815/article/details/52469483

版权声明:本文为博主原创文章,转载请注明出处。

HTML5 Android开发学习Cordova-二维码扫描

几经周折,终于完成Cordova的环境配置,计划开发第一个APP,二维码扫描,目标: 第一个手工的APP 第一个使用HTML5 mobile相关框架的APP 第一个使用本地Device的APP 二维码...
  • shenjf2000
  • shenjf2000
  • 2015年04月24日 14:13
  • 3000

Mui手势密码

html部分 index页面 body{background: #fff;} header.mui-bar.mui-ba...
  • qq_39919114
  • qq_39919114
  • 2017年12月27日 15:13
  • 133

指纹识别 源代码中带有大量注解

源代码及毕业论文参考模板下载 指纹识别的一般步骤为指纹采集、预处理、特征点提取、特征点匹配。指纹分为螺旋形、弓形、环形。指纹的处理效果影响着后面特征点的提取和识别效果,所以图像的预处理占有重要的地位...
  • m0_37402140
  • m0_37402140
  • 2018年01月05日 19:15
  • 236

指纹识别开源代码SourceAFIS使用入门

SourceAFIS是一个人类指纹识别库,它可以比较两个指纹(1:1模式)是否属于同一个人,或搜索一个大型数据库(1:N模式)找出该指纹的身份。它需要原始指纹图像的输入,并产生匹配得分的输出。提供 ....
  • ss910
  • ss910
  • 2017年07月09日 09:36
  • 1797

Android studio指纹识别实例

  • 2017年09月26日 11:00
  • 257KB
  • 下载

一种针对特定网站类别的网页指纹识别方法 (南邮 CN105281973A)

  • 2017年10月08日 14:08
  • 1.12MB
  • 下载

设备指纹

设备标识(指纹)是什么? 设备标识(指纹)是基于设备的多种存储或路由介质生成的不重复、唯一的设备标识,和现实世界里政府用身份证来标识公民情况类似,是互联网和移动互联网领域十分成熟的一项技术。一般应用...
  • feicongcong
  • feicongcong
  • 2017年08月14日 15:20
  • 648

Android之android studio如何获取证书指纹 (SHA1)

android studio如何获取证书指纹 (SHA1) 为什么要用SHA1 我们做百度地图或是高德地图的时候。注册app信息要求填写数字签名  我们可以通过外部命令行获取,也可以通过ecli...
  • u011068702
  • u011068702
  • 2015年12月07日 17:24
  • 1375

帆布指纹识别——用户无隐私

一般情况下,网站或者广告联盟都会非常想要一种技术方式可以在网络上精确定位到每一个个体,这样可以通过收集这些个体的数据,通过分析后更加精准的去推送广告(精准化营销)或其他有针对性的一些活动。Cookie...
  • aqzwss
  • aqzwss
  • 2015年06月03日 00:16
  • 992

指纹识别-流程

一、为什么要关注指纹识别生物识别技术源远流长,比如人脸识别,我们进化了精细的双眼系统进行识别,但是如果让计算机来做精确的人脸识别,却是一件比较困难的事。而相比指纹识别,可以认为在人类文明史上才开始有所...
  • lowkeyway
  • lowkeyway
  • 2017年04月06日 22:16
  • 2136
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:指纹识别入门(1)
举报原因:
原因补充:

(最多只允许输入30个字)