使用Fragment来显示BiometricPrompt,并在旋转/ onCreate时恢复它的状态。
1.首先,在应用程序的布局文件中添加一个Fragment:
2.创建BiometricFragment类:
public class BiometricFragment extends Fragment {
private BiometricPrompt mBiometricPrompt; private BiometricPrompt.PromptInfo mPromptInfo;
@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState);
if (savedInstanceState != null) {
// 恢复BiometricPrompt状态
mBiometricPrompt = savedInstanceState.getParcelable("biometricPrompt");
mPromptInfo = savedInstanceState.getParcelable("promptInfo");
} else {
// 创建新的BiometricPrompt
mBiometricPrompt = new BiometricPrompt(this,
new Executor() {
@Override
public void execute(Runnable command) {
}
},
new BiometricPrompt.AuthenticationCallback() {
@Override
public void onAuthenticationSucceeded(BiometricPrompt.AuthenticationResult result) {
// 指纹验证成功
Log.d("BiometricFragment", "onAuthenticationSucceeded");
}
@Override
public void onAuthenticationError(int errorCode, CharSequence errString) {
// 指纹验证失败
Log.d("BiometricFragment", "onAuthenticationError");
}
});
// 设置提示信息
mPromptInfo = new BiometricPrompt.PromptInfo.Builder()
.setTitle("指纹验证")
.setSubtitle("请使用您的指纹进行验证")
.setNegativeButtonText("取消")
.build();
}
// 调用BiometricPrompt.authenticate
mBiometricPrompt.authenticate(mPromptInfo);
}
@Override public void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState);
// 保存当前BiometricPrompt状态
outState.putParcelable("biometricPrompt", mBiometricPrompt);
outState.putParcelable("promptInfo