首页 > 解决方案 > 生物识别 - Android PIE 上的 FingerprintManager Xamarin 表单 - 9

问题描述

FingerprintManager#isHardwareDetected() 和 FingerprintManager#hasEnrolledFingerprints()。这两者在 Android 28 中都已弃用。我还可以使用什么来查看此版本中是否注册了指纹?我认为这是一种选择。

KeyguardManager keyguardManager =
                    (KeyguardManager) getSystemService(KEYGUARD_SERVICE);

如果该选项没问题,如何将其翻译成 xamarin 形式,例如 ()

FingerprintManagerCompat fpm= FingerprintManagerCompat.From(CrossCurrentActivity.Current.Activity);

对此:

标签: androidxamarin.formsfingerprintbiometricsandroid-9.0-pie

解决方案


您可以Plugin.Fingerprint在 android 9.0 中使用它来实现它。 https://www.nuget.org/packages/Plugin.Fingerprint/

有我的演示 GIF(如果你第一次运行这个项目,请确保你已经在你的设备中创建了指纹)。 在此处输入图像描述

因为表单只有一个活动,如果推送认证页面,我们应该实现ActivityLifecycleCallbacksFingerprintDialogFragment

这是MainApplication的代码,它需要Plugin.CurrentActivity插件

    [Application]
public class MainApplication : Application, Application.IActivityLifecycleCallbacks
{
    public MainApplication(IntPtr handle, JniHandleOwnership transer)
      : base(handle, transer)
    {
    }

    public override void OnCreate()
    {
        base.OnCreate();
        RegisterActivityLifecycleCallbacks(this);

        CrossFingerprint.SetCurrentActivityResolver(() => CrossCurrentActivity.Current.Activity);

        // uncomment this line to use custom dialog
        //CrossFingerprint.SetDialogFragmentType<MyCustomDialogFragment>();
    }

    public override void OnTerminate()
    {
        base.OnTerminate();
        UnregisterActivityLifecycleCallbacks(this);
    }

    public void OnActivityCreated(Activity activity, Bundle savedInstanceState)
    {
        CrossCurrentActivity.Current.Activity = activity;
    }

    public void OnActivityDestroyed(Activity activity)
    {
    }

    public void OnActivityPaused(Activity activity)
    {
    }

    public void OnActivityResumed(Activity activity)
    {
        CrossCurrentActivity.Current.Activity = activity;
    }

    public void OnActivitySaveInstanceState(Activity activity, Bundle outState)
    {
    }

    public void OnActivityStarted(Activity activity)
    {
        CrossCurrentActivity.Current.Activity = activity;
    }

    public void OnActivityStopped(Activity activity)
    {
    }
}

这是MyCustomDialogFragment的代码

   public class MyCustomDialogFragment : FingerprintDialogFragment
{
    public override void OnCreate(Bundle savedInstanceState)
    {
        base.OnCreate(savedInstanceState);

        // Create your fragment here
    }

    public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
    {
        var view = base.OnCreateView(inflater, container, savedInstanceState);
        view.Background = new ColorDrawable(Color.Blue);
        return view;
    }
}

有我的演示代码。

https://github.com/851265601/FrigerPrintDemo


推荐阅读