Android 实现面容登录demo源码
时间: 2023-10-06 17:09:32 浏览: 39
以下是一个基本的 Android 实现面容登录的示例代码:
1. 在布局文件中添加一个按钮和一个文本视图:
```
<Button
android:id="@+id/btn_face_login"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Face Login" />
<TextView
android:id="@+id/tv_status"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Status: " />
```
2. 在 Activity 中初始化 Face ID 检测器,并在按钮点击事件中调用检测器:
```
public class MainActivity extends AppCompatActivity {
private static final int REQUEST_CODE_FACEID = 100;
private FaceManager faceManager;
private TextView tvStatus;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tvStatus = findViewById(R.id.tv_status);
faceManager = new FaceManager(this);
faceManager.initFaceDetector();
Button btnFaceLogin = findViewById(R.id.btn_face_login);
btnFaceLogin.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
faceManager.authenticate(REQUEST_CODE_FACEID);
}
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == REQUEST_CODE_FACEID) {
if (resultCode == RESULT_OK) {
tvStatus.setText("Status: Face authentication successful");
} else {
tvStatus.setText("Status: Face authentication failed");
}
}
}
}
```
3. 在 FaceManager 类中实现 Face ID 检测器的初始化和身份验证方法:
```
public class FaceManager {
private Context context;
private BiometricPrompt biometricPrompt;
private Executor executor;
public FaceManager(Context context) {
this.context = context;
this.executor = ContextCompat.getMainExecutor(context);
}
public void initFaceDetector() {
biometricPrompt = new BiometricPrompt((Activity) context, executor, new BiometricPrompt.AuthenticationCallback() {
@Override
public void onAuthenticationSucceeded(@NonNull BiometricPrompt.AuthenticationResult result) {
super.onAuthenticationSucceeded(result);
((Activity) context).setResult(Activity.RESULT_OK);
((Activity) context).finish();
}
@Override
public void onAuthenticationFailed() {
super.onAuthenticationFailed();
((Activity) context).setResult(Activity.RESULT_CANCELED);
((Activity) context).finish();
}
});
}
public void authenticate(int requestCode) {
BiometricPrompt.PromptInfo promptInfo = new BiometricPrompt.PromptInfo.Builder()
.setTitle("Face Login")
.setSubtitle("Use your face to login")
.setNegativeButtonText("Cancel")
.build();
biometricPrompt.authenticate(promptInfo);
((Activity) context).startActivityForResult(biometricPrompt.createPromptIntent(), requestCode);
}
}
```
这样,当用户点击面容登录按钮时,将启动系统的面容识别界面,并在成功或失败后返回结果。