我目前正在使用生物识别管理器和生物识别提示在 google pixel 2 上创建指纹认证应用程序。下面的代码适用于该应用程序。但是,我想知道如果我改为在 google pixel 4 上开发,我是否仍然可以使用生物识别管理器/生物识别提示进行面部识别而不是指纹来进行身份验证?在相同的前提下,设备的注册面孔可能是唯一的登录面孔。任何帮助或解释都会非常感谢!
// Building the fingerprint scanner
final Executor executor = Executors.newSingleThreadExecutor();
final BiometricPrompt biometricPrompt = new BiometricPrompt.Builder(this)
.setTitle("Biosecure")
.setSubtitle("Fingerprint Authentication")
.setDescription("Please scan your fingerprint")
.setNegativeButton("cancel", executor, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
}
}).build();
// Scanning fingerprint
btnScanFinger.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v) {
biometricPrompt.authenticate(new CancellationSignal(), executor, new BiometricPrompt.AuthenticationCallback() {
@Override
public void onAuthenticationError(int errorCode, CharSequence errString) {
super.onAuthenticationError(errorCode, errString);
}
@Override
public void onAuthenticationHelp(int helpCode, final CharSequence helpString) {
super.onAuthenticationHelp(helpCode, helpString);
}
@Override
public void onAuthenticationSucceeded(BiometricPrompt.AuthenticationResult result) {
super.onAuthenticationSucceeded(result);
activity.runOnUiThread(new Runnable() {
@Override
public void run()
{
Toast.makeText(Login_Biometrics.this, "Fingerprint authenticated successfully", Toast.LENGTH_LONG).show();
fingerprintAuth = true;
please.setText("Please input your pin");
fingerprint.setVisibility(View.INVISIBLE);
btnScanFinger.setVisibility(View.INVISIBLE);
PinInput.setVisibility(View.VISIBLE);
}
});
}
解决方案:
将相同的代码用于面部识别,并用于使用面部身份验证的设备进行解锁。我使用的是 Google Pixel 4。记得添加使用生物识别的权限。
<uses-permission android:name="android.permission.USE_BIOMETRIC" />
// Building the fingerprint scanner
final Executor executor = Executors.newSingleThreadExecutor();
final BiometricPrompt biometricPrompt = new BiometricPrompt.Builder(this)
.setTitle("Biosecure")
.setSubtitle("Face Authentication")
.setDescription("Please scan your face")
.setNegativeButton("cancel", executor, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
}
}).build();
btnScanFinger.setOnClickListener(new View.OnClickListener()
{
@Override
public void onClick(View v) {
biometricPrompt.authenticate(new CancellationSignal(), executor, new BiometricPrompt.AuthenticationCallback() {
@Override
public void onAuthenticationError(int errorCode, CharSequence errString) {
super.onAuthenticationError(errorCode, errString);
}
@Override
public void onAuthenticationHelp(int helpCode, final CharSequence helpString) {
super.onAuthenticationHelp(helpCode, helpString);
}
@Override
public void onAuthenticationSucceeded(BiometricPrompt.AuthenticationResult result) {
super.onAuthenticationSucceeded(result);
activity.runOnUiThread(new Runnable() {
@Override
public void run()
{
Toast.makeText(MainActivity.this, "Face scanned succesfully", Toast.LENGTH_LONG).show();
fingerprintAuth = true;
}
});
}