0
点赞
收藏
分享

微信扫一扫

Android指纹识别API讲解,一种更快更好的用户体验

罗蓁蓁 2022-04-21 阅读 87

这里我们修改了 MainActivity 中的布局文件,在界面上添加了一个 已进入 App 主界面 的 TextView,待会在指纹认证通过之后,就会让 APP 跳转到此界面。

接下来我们开始编写指纹认证界面,新建 fingerprint_dialog.xml,代码如下所示:

<?xml version="1.0" encoding="utf-8"?>

这是一个非常简易的指纹认证界面,相信没什么需要解释的地方。界面大致样式如下图所示。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-A6mJHkba-1650519366360)(https://p3-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/217aa4bf4cd54cc7b3a9f85d0fb7c433~tplv-k3u1fbpfcp-zoom-1.image)]

注意,通常为了让用户清楚的知道现在需要进行指纹认证,Google 官方建议最好使用一个通用的指纹图标,而不应该由各 APP 制作自己的指纹图标。为此,Google 也特意提供了一套指纹认证的组图,可以 [点击这里](() 查看和下载。

接着我们创建一个 FingerprintDialogFragment 类,并让它继承自 DialogFragment,用于作为提示用户进行指纹认证的对话框,代码如下所示:

@TargetApi(23)
public class FingerprintDialogFragment extends DialogFragment {

private FingerprintManager fingerprintManager;

private CancellationSignal mCancellationSignal;

private Cipher mCipher;

private LoginActivity mActivity;

private TextView errorMsg;

/**

  • 标识是否是用户主动取消的认证。
    */
    private boolean isSelfCancelled;

public void setCipher(Cipher cipher) {
mCipher = cipher;
}

@Override
public void onAttach(Context context) {
super.onAttach(context);
mActivity = (LoginActivity) getActivity();
}

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
fingerprintManager = getContext().getSystemService(FingerprintManager.class);
setStyle(DialogFragment.STYLE_NORMAL, android.R.style.Theme_Material_Light_Dialog);
}

@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.fingerprint_dialog, container, false);
errorMsg = v.findViewById(R.id.error_msg);
TextView cancel = v.findViewById(R.id.cancel);
cancel.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dismiss();
stopListening();
}
});
return v;
}

@Override
public void onResume() {
super.onResume();

startListening(mCipher);
}

@Override
public void onPause() {
super.onPause();

stopListening();
}

private void startListening(Cipher cipher) {
isSelfCancelled = false;
mCancellationSignal = new CancellationSignal();
fingerprintManager.authenticate(new FingerprintManager.CryptoObject(cipher), mCancellationSignal, 0, new FingerprintManager.AuthenticationCallback() {
@Override
public void onAu Android开源项目《ali1024.coding.net/public/P7/Android/git》 thenticationError(int errorCode, CharSequence errString) {
if (!isSelfCancelled) {
errorMsg.setText(errString);
if (errorCode == FingerprintManager.FINGERPRINT_ERROR_LOCKOUT) {
Toast.makeText(mActivity, errString, Toast.LENGTH_SHORT).show();
dismiss();
}
}
}

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

@ 《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》开源 Override
public void onAuthenticationSucceeded(FingerprintManager.AuthenticationResult result) {

总结

【Android 详细知识点思维脑图(技能树)】

其实Android开发的知识点就那么多,面试问来问去还是那么点东西。所以面试没有其他的诀窍,只看你对这些知识点准备的充分程度。so,出去面试时先看看自己复习到了哪个阶段就好。

虽然 Android 没有前几年火热了,已经过去了会四大组件就能找到高薪职位的时代了。这只能说明 Android 中级以下的岗位饱和了,现在高级工程师还是比较缺少的,很多高级职位给的薪资真的特别高(钱多也不一定能找到合适的),所以努力让自己成为高级工程师才是最重要的。

由于篇幅有限,这里以图片的形式给大家展示一小部分。

网上学习 Android的资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。希望这份系统化的技术体系对大家有一个方向参考。
上比预期多花了不少精力),包含知识脉络 + 诸多细节。

由于篇幅有限,这里以图片的形式给大家展示一小部分。

[外链图片转存中…(img-YuvC9NMV-1650519366361)]

网上学习 Android的资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。希望这份系统化的技术体系对大家有一个方向参考。

举报

相关推荐

0 条评论