android - 检测设备是用针锁或面部锁的指纹锁保护的吗?
问题描述
我的应用程序包含用于登录的用户身份验证(包括密码/图案、指纹解锁),这取决于设备安全性。我正在使用生物识别管理器来检测设备是否使用BiometricManager支持指纹,并使用isDeviceSecure()检查设备是否受到保护。我需要检测在哪种模式下移动设备受到保护,无论是针/图案、带指纹的针/图案、带面部解锁的针/图案还是所有三种模式(针/图案、面部解锁、指纹)。
解决方案
这是检测设置的锁类型的代码
将库添加到build.gradle
implementation 'androidx.biometric:biometric:1.0.0-beta01'
并将此代码添加到您的活动中
KeyguardManager keyguardManager = (KeyguardManager) getSystemService(Context.KEYGUARD_SERVICE);
boolean keyguardSecure = keyguardManager.isKeyguardSecure();
Log.e("---", "checkSecurityTypes: keyguardLocked - " + keyguardSecure);//true = pin/pattern
int i = BiometricManager.from(this).canAuthenticate();
Log.e("---", "checkSecurityTypes: " + i);//true 0 = pin/pattern with finger print
switch (i) {
case BiometricManager.BIOMETRIC_SUCCESS:
Log.d("MY_APP_TAG", "App can authenticate using biometrics.");
break;
case BiometricManager.BIOMETRIC_ERROR_NO_HARDWARE:
Log.e("MY_APP_TAG", "No biometric features available on this device.");
break;
case BiometricManager.BIOMETRIC_ERROR_HW_UNAVAILABLE:
Log.e("MY_APP_TAG", "Biometric features are currently unavailable.");
break;
case BiometricManager.BIOMETRIC_ERROR_NONE_ENROLLED:
// Prompts the user to create credentials that your app accepts.
break;
}
if (i == 0 && keyguardSecure) {
//fingerprint is always with pin/pattern/password
Log.e("---", "checkSecurityTypes: fingerprint is set with pin/pattern");
} else if (keyguardSecure) {
//true if pin/pattern/password is set
Log.e("---", "checkSecurityTypes: pin/pattern is set");
}
我们无法检测面部类型。有关更多信息,请参阅此链接
推荐阅读
- java - 如何在 laravel 中返回 Content 类型?
- kotlin - 带有 Java 超类的 Kotlin 数据类
- c++ - GCC avx2intrin.h(版本 X-9.2)中缺少 _mm_broadcastsd_pd
- excel - excel SQL VBA更新2个访问表
- google-chrome - 从 Firebase 提供时,带有范围请求路由器的 Workbox 预缓存音频无法在 Chrome 中播放
- pyspark - 如何在 PySpark 中的两个日期之间生成每小时时间戳?
- javascript - Ajax POST 仅在页面刷新时执行 php 脚本
- c - 在 C 中打印 3d 数组中的 2d 部分(分段错误)
- plot - GNUplot - 使用窗口坐标系画线
- vb.net - 使用 VB.Net 在 MS Project 中生成资源使用时间阶段性数据