Биометрия - FingerprintManager Xamarin формы на Android PIE - 9 - PullRequest
1 голос
/ 05 апреля 2019

FingerprintManager # isHardwareDetected () и FingerprintManager # hasEnrolledFingerprints ().И то, и другое устарело в Android 28. Что еще я мог бы использовать, чтобы увидеть, зарегистрированы ли отпечатки пальцев в этой версии?Я видел это как вариант.

KeyguardManager keyguardManager =
                    (KeyguardManager) getSystemService(KEYGUARD_SERVICE);

если эта опция в порядке, как перевести ее в формы xamarin, например ()

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

На это:

1 Ответ

0 голосов
/ 08 апреля 2019

Вы можете использовать Plugin.Fingerprint, чтобы получить его в Android 9.0.https://www.nuget.org/packages/Plugin.Fingerprint/

Это мой демонстрационный GIF-файл (если вы впервые запускаете этот проект, убедитесь, что на вашем устройстве создан отпечаток пальца).enter image description here

Поскольку формы имеют только одно действие, Если нажать на страницу авторизации, мы должны достичь ActivityLifecycleCallbacks и FingerprintDialogFragment

Вот код 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

...