18

如何从我的应用程序启动指纹注册设置屏幕(添加指纹屏幕)?

注册指纹后,有什么方法可以导航回我的申请?(使用 startActivityForResult)

4

6 回答 6

21

阅读文档后,我发现到目前为止,还没有这样的意图操作可用。我使用以下意图启动了安全设置(指纹选项可用)。

startActivity(new Intent(android.provider.Settings.ACTION_SECURITY_SETTINGS));
于 2016-10-28T16:19:58.223 回答
18

使用 API>= PSettings.ACTION_FINGERPRINT_ENROLL& BiometricPrompt

@RequiresApi(api = Build.VERSION_CODES.P)
private void startFingerprintEnrollment(@NonNull AppCompatActivity activity) {
    Intent intent = new Intent(Settings.ACTION_FINGERPRINT_ENROLL);
    activity.startActivityForResult(intent, REQUESTCODE_FINGERPRINT_ENROLLMENT);
}

与 API 相比>= M

@SuppressWarnings("deprecation")
@RequiresApi(api = Build.VERSION_CODES.M)
private void gotoSecuritySettings(@NonNull AppCompatActivity activity) {
    Intent intent = new Intent(Settings.ACTION_SECURITY_SETTINGS);
    activity.startActivityForResult(intent, REQUESTCODE_SECURITY_SETTINGS);
}

认为这是FingerprintEnrollIntroduction ...

指纹登记的入职活动。

于 2018-11-12T22:50:58.737 回答
4

例如,建议的答案在华为 P9 上不起作用。此型号的指纹设置可从以下位置获得: startActivity(new Intent(android.provider.Settings.ACTION_SETTINGS));

另一件事是,当您在应用程序任务上启动系统设置时,注册新指纹并通过后按返回,您将无法在首次授权时加密任何消息。最好的情况是,如果用户将应用程序设置为后台并自己注册手指,然后恢复应用程序,加密将起作用。我不知道这种行为的原因是什么,所以我建议只通知用户注册手指的可能性。

于 2017-06-07T07:43:48.417 回答
2

解决方案:如果您的目标 API 级别为 30 及以上

Settings.ACTION_FINGERPRINT_ENROLL 在 API 级别 30 中已弃用,请参阅

用这个:

startActivity(Intent(Settings.ACTION_BIOMETRIC_ENROLL))

但是由于自定义操作系统,这可能不会在所有 android 设备中支持,

我建议这样使用:

try {
       startActivity(Intent(Settings.ACTION_BIOMETRIC_ENROLL))
} catch (e: Exception) {
       startActivity(Intent(Settings.ACTION_SETTINGS))
}
于 2021-05-12T06:58:29.413 回答
1

建议的答案缺少一个重点:如果用户需要注册 BIOMETRIC_STRONG 类型的生物特征,则需要将 Extra 添加到 Intent 中才能正确打开 BiometricEnrollActivity。

如果我尝试注册 STRONG 生物特征,而 WEAK 生物特征已经注册,则 startActvity 命令无法打开活动。

因此,用于让用户注册 BIOMETRIC_STRONG 的完整片段是:

val intent: Intent = when {
  Build.VERSION.SDK_INT >= Build.VERSION_CODES.R -> {
     Intent(Settings.ACTION_BIOMETRIC_ENROLL).putExtra(EXTRA_BIOMETRIC_AUTHENTICATORS_ALLOWED, BiometricManager.Authenticators.BIOMETRIC_STRONG)
  }
   Build.VERSION.SDK_INT >= Build.VERSION_CODES.P -> {
     Intent(Settings.ACTION_FINGERPRINT_ENROLL)
   }
   else -> {
     Intent(Settings.ACTION_SECURITY_SETTINGS)
   }
}
try {
    startActivity(intent)
} catch (error: ActivityNotFoundException) {
    startActivity(Intent(Settings.ACTION_SETTINGS))
}
于 2022-02-10T15:21:49.960 回答
0
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
    startActivity(new Intent(Settings.ACTION_BIOMETRIC_ENROLL));
} else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
    startActivity(new Intent(Settings.ACTION_FINGERPRINT_ENROLL));
} else {
    startActivity(new Intent(Settings.ACTION_SECURITY_SETTINGS));
}
于 2021-12-10T14:42:33.057 回答