生物识别-Android PIE上的FingerprintManager Xamarin表格-9
FingerprintManager#isHardwareDetected()和FingerprintManager#hasEnrolledFingerprints().两者在Android 28中均已弃用. 我还可以使用什么来查看此版本中是否注册了指纹? 我认为这是一个选择.
FingerprintManager#isHardwareDetected() and FingerprintManager#hasEnrolledFingerprints(). Both of which are deprecated in Android 28. What else could I use in order to see if fingerprints are enrolled in this version? I saw this as an option.
KeyguardManager keyguardManager =
(KeyguardManager) getSystemService(KEYGUARD_SERVICE);
如果该选项还可以,如何将其转换为xamarin形式,例如()
if that option is ok, how to translate it into xamarin forms for example ()
FingerprintManagerCompat fpm= FingerprintManagerCompat.From(CrossCurrentActivity.Current.Activity);
对此:
您可以在Android 9.0中使用Plugin.Fingerprint
来实现它.
https://www.nuget.org/packages/Plugin.Fingerprint/
You can use Plugin.Fingerprint
to acheved it in android 9.0.
https://www.nuget.org/packages/Plugin.Fingerprint/
有我的演示的GIF文件(如果您第一次运行此项目,请确保已在设备中创建了指纹).
There is my GIF of demo(If you first run this project, please make sure you have created fingerprint in you device).
因为表单只有一个活动,所以如果推送身份验证页面,我们应该实现ActivityLifecycleCallbacks
和FingerprintDialogFragment
Because forms just have one activity, If pushed the auth page, we should achieved ActivityLifecycleCallbacks
and FingerprintDialogFragment
这是 MainApplication 的代码,它需要Plugin.CurrentActivity
插件
Here is code of MainApplication , it need the Plugin.CurrentActivity
plugin
[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;
}
}
这是我的演示代码.