我正在使用生物识别库锁定应用程序。一切正常,当我用指纹解锁时,会调用AuthenticationSucceeded()get,设备会从锁屏中导航。然而,如果使用模式解锁,则会调用onAuthenticationSucceeded()get,但导航没有初始化,我被留在锁屏片段上。
编辑:这只影响具有任何设备凭据的API29
编辑2:我也得到了
FragmentNavigator:忽略popBackStack()调用:FragmentManager已经保存了它的状态
FragmentNavigator:忽略navigate()调用:FragmentManager已保存其状态
private lateinit var biometricPrompt: BiometricPrompt
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
biometricPrompt = createBiometricPrompt()
return inflater.inflate(R.layout.lock_screen_fragment, container, false)
}
override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)
val isAppLockEnabled: Boolean = PreferenceManager.getDefaultSharedPreferences(context)
.getBoolean("lock_app_preference", false)
// If app locks is not set go to home fragment else display app lock screen
if (!isAppLockEnabled) {
findNavController().navigate(R.id.action_lock_screen_fragment_dest_to_home_fragment_dest)
} else {
// Prompt appears when user clicks "Unlock".
unlock_button.setOnClickListener {
val promptInfo = createPromptInfo()
biometricPrompt.authenticate(promptInfo)
}
}
}
private fun createBiometricPrompt(): BiometricPrompt {
val executor = ContextCompat.getMainExecutor(context)
val callback = object : BiometricPrompt.AuthenticationCallback() {
override fun onAuthenticationError(errorCode: Int, errString: CharSequence) {
super.onAuthenticationError(errorCode, errString)
Log.d("AuthenticationError()", "$errorCode :: $errString")
}
override fun onAuthenticationFailed() {
super.onAuthenticationFailed()
Log.d("AuthenticationFailed()", "Authentication failed for an unknown reason")
}
override fun onAuthenticationSucceeded(result: BiometricPrompt.AuthenticationResult) {
super.onAuthenticationSucceeded(result)
lock_icon.setImageResource(R.drawable.ic_unlock)
lock_screen_text_view.text = getString(R.string.app_unlocked)
//This doesn't work when using pattern unlock findNavController().navigate(R.id.action_lock_screen_fragment_dest_to_home_fragment_dest)
}
}
return BiometricPrompt(this, executor, callback)
}
private fun createPromptInfo(): BiometricPrompt.PromptInfo {
return BiometricPrompt.PromptInfo.Builder()
.setTitle("Unlock App")
.setConfirmationRequired(false)
.setDeviceCredentialAllowed(true)
.build()
}
}
好的,所以我解决了这个问题。将导航从onAuthenticationResume()移动到片段onResume()。设备凭据窗口暂停我的应用程序,之后不知何故无法调用导航。
解决方案代码:
private var isAppUnlocked : Boolean = false
override fun onAuthenticationSucceeded(result: BiometricPrompt.AuthenticationResult) {
super.onAuthenticationSucceeded(result)
isAppUnlocked = true
unlockApp()
Log.d("AuthenticationSuccess", "Authentication succeeded")
}
override fun onResume() {
super.onResume()
if(isAppUnlocked){
unlockApp()
}
}
private fun unlockApp(){
lock_icon.setImageResource(R.drawable.ic_unlock)
lock_screen_text_view.text = getString(R.string.app_unlocked)
findNavController().navigate(R.id.action_lock_screen_fragment_dest_to_home_fragment_dest)
}
我试图连接网络应用程序中的生物识别设备。我在windows应用程序中工作正常,但在web中它会抛出错误。 Windows窗体。反恐精英: 表单设计器: 同样,我尝试在web应用程序中连接,但它显示错误:Webform1: 它抛出错误作为 无法实例化ActiveX控件“87733ee1-d095-442b-a200-6de90c5c8318”,因为当前线程不在单线程单元中。 动态链接库: 谁能帮我纠
我最近购买了uface 800 ZKTeco生物识别设备,并创建了从该设备中提取考勤日志的应用程序。一切正常,但每当我们通过关闭/打开电源重新启动机器时,我无法连接到机器。我试图从命令提示符ping分配给设备的IP,但无法ping,它说“请求超时”。我阅读了SDK提供的文档,但没有得到任何解决方案。国王帮我解决这个问题。
问题就在这里。我想在我的设备(三星Galaxy Ace 2)上运行我的Android Studio应用程序。但对我没什么用。告诉我我错过了什么: 2)安装了ADB驱动程序(在设备管理器中可以看到Android Composite ADB接口) 3)ADB设备列表仍然清晰,即使我重置服务器(ADB kill-server,ADB start-server,ADB devices-设备列表清晰) 4)
codenameone是否支持 androidx.biometric。生物提示 android.hardware.biometrics.Biometroprompt 我试图在codeoneproject中使用这些类,但我从构建服务器得到了以下错误:错误:包android.hardware.biometrics不存在错误:包androidx.biometric不存在 您是否计划支持生物识别提示?
ADB无法识别我的Redmi Notes设备。我正在使用Windows8 另外,当我在CMD中使用下面的命令时,它显示的是adb设备 我遵循下面链接中的程序, 使用硬件设备