【问题标题】:Biometrics - FingerprintManager Xamarin forms on Android PIE - 9生物识别 - Android PIE 上的 FingerprintManager Xamarin 表单 - 9
【发布时间】:2019-04-08 15:20:46
【问题描述】:

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

KeyguardManager keyguardManager =
                    (KeyguardManager) getSystemService(KEYGUARD_SERVICE);

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

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

对此:

【问题讨论】:

  • 你能解决这个问题还是我需要帮助你?
  • @G.hakim 我发誓我将您的答案标记为回复,但我不再看到它了。这对我的问题有所帮助。能否请您再次提供答案,以便我将其标记为答案。谢谢
  • 我猜我的评论在这里? stackoverflow.com/a/55522159/7462031

标签: android xamarin.forms fingerprint biometrics android-9.0-pie


【解决方案1】:

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

这是我的演示 GIF(如果你第一次运行这个项目,请确保你已经在你的设备中创建了指纹)。

由于表单只有一个activity,如果推送auth页面,应该实现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

【讨论】:

  • 如果回复有帮助,请尝试将其标记为答案,它将帮助其他有类似问题的人。
  • 非常感谢您的帮助。你是对的,你的解决方案非常有效。但是,我正在寻找更多关于如何更改新的已弃用功能以检测是否有任何指纹可用或在 android 9 上注册。
猜你喜欢
  • 2021-09-15
  • 1970-01-01
  • 2011-07-07
  • 2021-04-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多