/// <summary> /// Gets the device's current biometric capabilities. /// </summary> /// <returns>A <see cref="BiometryCapabilities" /> struct instance.</returns> public Task <BiometryCapabilities> GetCapabilities() { bool _isEnabled = false; switch (_biometricManager.CanAuthenticate(BiometricManager.Authenticators.BiometricStrong)) { case BiometricManager.BiometricSuccess: _isEnabled = true; break; case BiometricManager.BiometricErrorNoHardware: _isEnabled = false; break; case BiometricManager.BiometricErrorNoneEnrolled: _isEnabled = false; break; case BiometricManager.BiometricErrorSecurityUpdateRequired: _isEnabled = false; break; default: break; } bool devicePinAvailable = Convert.ToBoolean(_biometricManager.CanAuthenticate(BiometricManager.Authenticators.DeviceCredential)); return(Task.Run(() => { return new BiometryCapabilities(BiometryType.FaceOrFingerprint, _isEnabled, devicePinAvailable); })); }
private FingerprintAvailability GetBiometricAvailability() { var context = Application.Context; if (context.CheckCallingOrSelfPermission(Manifest.Permission.UseBiometric) != Permission.Granted && context.CheckCallingOrSelfPermission(Manifest.Permission.UseFingerprint) != Permission.Granted) { return(FingerprintAvailability.NoPermission); } var result = _manager.CanAuthenticate(); switch (result) { case BiometricManager.BiometricErrorNoHardware: return(FingerprintAvailability.NoSensor); case BiometricManager.BiometricErrorHwUnavailable: return(FingerprintAvailability.Unknown); case BiometricManager.BiometricErrorNoneEnrolled: return(FingerprintAvailability.NoFingerprint); case BiometricManager.BiometricSuccess: return(FingerprintAvailability.Available); } return(FingerprintAvailability.Unknown); }
public FingerprintService( FragmentActivity fragmentActivity, Context applicationContext, IObservable <Unit> applicationActivated, CoreDispatcher dispatcher, IScheduler backgroundScheduler, FuncAsync <BiometricPrompt.PromptInfo> promptInfoBuilder) { fragmentActivity.Validation().NotNull(nameof(fragmentActivity)); applicationActivated.Validation().NotNull(nameof(applicationActivated)); backgroundScheduler.Validation().NotNull(nameof(backgroundScheduler)); _dispatcher = dispatcher ?? throw new ArgumentNullException(nameof(dispatcher)); _promptInfoBuilder = promptInfoBuilder ?? throw new ArgumentNullException(nameof(promptInfoBuilder)); var executor = ContextCompat.GetMainExecutor(applicationContext); var callback = new AuthenticationCallback(OnAuthenticationSucceeded, OnAuthenticationFailed, OnAuthenticationError); _BiometricPrompt = new BiometricPrompt(fragmentActivity, executor, callback); _BiometricManager = BiometricManager.From(Application.Context); _keyStore = KeyStore.GetInstance(ANDROID_KEYSTORE); _keyStore.Load(null); _canAuthenticate = applicationActivated .ObserveOn(backgroundScheduler) .StartWith(backgroundScheduler, Unit.Default) .Select(_ => _BiometricManager.CanAuthenticate()) .Replay(1, backgroundScheduler) .RefCount(); }