FingerprintManagerUtil.java
5.85 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
package com.huaheng.wms.facedete;
import android.content.Context;
import android.support.v4.hardware.fingerprint.FingerprintManagerCompat;
import android.support.v4.os.CancellationSignal;
/**
* 作者:created by meixi
* 邮箱:13164716840@163.com
* 日期:2018/8/30 09
*/
public class FingerprintManagerUtil {
private static FingerprintManagerCompat fingerprintManagerCompat;
private static CancellationSignal cancellationSignal;
private FingerprintManagerUtil() {
}
/**
* 开始进行指纹验证
*
* @param context 上下文
* @param fingerprintListener 指纹验证回调接口
*/
public static void startFingerprinterVerification(Context context, final FingerprintListener fingerprintListener) {
fingerprintManagerCompat = FingerprintManagerCompat.from(context);
// 是否支持指纹验证
if (fingerprintManagerCompat == null || !fingerprintManagerCompat.isHardwareDetected()) {
if (fingerprintListener != null)
fingerprintListener.onNonsupport();
return;
}
// 是否录入了指纹
if (!fingerprintManagerCompat.hasEnrolledFingerprints()) {
if (fingerprintListener != null)
fingerprintListener.onEnrollFailed();
return;
}
// 回调可以开始进行认证
if (fingerprintListener != null)
fingerprintListener.onAuthenticationStart();
cancellationSignal = new CancellationSignal();
fingerprintManagerCompat.authenticate(null, 0, cancellationSignal, new FingerprintManagerCompat.AuthenticationCallback() {
@Override
public void onAuthenticationError(int errMsgId, CharSequence errString) {
// 验证出错回调,指纹传感器会关闭一段时间
super.onAuthenticationError(errMsgId, errString);
if (fingerprintListener != null)
fingerprintListener.onAuthenticationError(errMsgId, errString);
}
@Override
public void onAuthenticationHelp(int helpMsgId, CharSequence helpString) {
// 验证帮助回调
super.onAuthenticationHelp(helpMsgId, helpString);
if (fingerprintListener != null)
fingerprintListener.onAuthenticationHelp(helpMsgId, helpString);
}
@Override
public void onAuthenticationSucceeded(FingerprintManagerCompat.AuthenticationResult result) {
// 验证成功
super.onAuthenticationSucceeded(result);
if (fingerprintListener != null)
fingerprintListener.onAuthenticationSucceeded(result);
}
@Override
public void onAuthenticationFailed() {
// 验证失败 指纹验证失败后,指纹传感器不会立即关闭指纹验证,
// 系统会提供5次重试的机会,即调用5次onAuthenticationFailed()后,才会调用onAuthenticationError()
super.onAuthenticationFailed();
if (fingerprintListener != null)
fingerprintListener.onAuthenticationFailed();
}
}, null);
}
/**
* 取消指纹验证
*/
public static void cancel() {
if (cancellationSignal != null && !cancellationSignal.isCanceled())
cancellationSignal.cancel();
}
/**
* 指纹验证回调监听
*/
public interface FingerprintListener {
/**
* 手机或系统不支持指纹验证时回调
*/
void onNonsupport();
/**
* 手机支持指纹验证,但是还没有录入指纹时回调
*/
void onEnrollFailed();
/**
* 可以进行指纹验证时回调,该方法主要作用用于在进行指纹验证之前做一些操作,比如弹出对话框
*/
void onAuthenticationStart();
/**
* 指纹验证成功时回调
*
* @param result {@link FingerprintManagerCompat.AuthenticationResult} 对象
*/
void onAuthenticationSucceeded(FingerprintManagerCompat.AuthenticationResult result);
/**
* 验证失败时回调
* <br/>
* 指纹验证失败后,指纹传感器不会立即关闭指纹验证,系统会提供5次重试的机会,即调用
* 5次 {@link #onAuthenticationFailed()} 后,才会调用 {@link #onAuthenticationError(int, CharSequence)}
*/
void onAuthenticationFailed();
/**
* 验证出错时回调,指纹传感器会关闭一段时间,具体时间根据厂商不同有所区别
*
* @param errMsgId 错误信息id
* @param errString 错误信息描述
*/
void onAuthenticationError(int errMsgId, CharSequence errString);
/**
* 验证帮助回调
*
* @param helpMsgId 帮助信息id
* @param helpString 帮助信息描述
*/
void onAuthenticationHelp(int helpMsgId, CharSequence helpString);
}
/**
* FingerprintListener 回调监听适配器,减少不必要方法的重写,只需要重写需要处理的对应方法即可
*/
public abstract static class FingerprintListenerAdapter implements FingerprintListener {
@Override
public void onNonsupport() {
}
@Override
public void onEnrollFailed() {
}
@Override
public void onAuthenticationStart() {
}
@Override
public void onAuthenticationFailed() {
}
@Override
public void onAuthenticationError(int errMsgId, CharSequence errString) {
}
@Override
public void onAuthenticationHelp(int helpMsgId, CharSequence helpString) {
}
}
}