android - 生物识别 - 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);
对此:
解决方案
您可以Plugin.Fingerprint
在 android 9.0 中使用它来实现它。
https://www.nuget.org/packages/Plugin.Fingerprint/
有我的演示 GIF(如果你第一次运行这个项目,请确保你已经在你的设备中创建了指纹)。
因为表单只有一个活动,如果推送认证页面,我们应该实现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;
}
}
有我的演示代码。
推荐阅读
- python-3.x - 为什么 append() 函数在每次迭代中都会改变变量的值?
- spring-boot - 使用 jpa 和 kafka 进行 Spring 交易示例?
- c++ - 字节数组切片并将部分映射到结构
- python - 需要在数据框列中查找唯一条目
- reactjs - 如何使用reactjs从左到右滚动我的图像?
- heroku - 如何将 Haskell 上的电报机器人上传到 Heroku(或其他免费服务器)?
- angular - 无法与 pusher.js 中的服务器数据绑定
- python-3.x - 如何解析列表列表以便将其制成表格?
- c++ - 使用 bdwgc,libgc,如何测试它是否工作
- android - 当我将 C++ 项目与 gradle 链接时,错误出现“错误:构建 Json 时出现异常”