我有一个Android指纹实现工作,我希望用Espresso添加UI测试.我无法找到解决方案的一个问题是如何模拟手指的扫描.有一个adb命令
adb -e emu finger touch可以在模拟器上运行.
关于如何将这样的东西与Espresso整合的任何想法?
我在 android 设备中自定义 biometricPrompt 有问题。我只使用指纹授权,但一些使用 android 9.0(例如三星 Galaxy S10+)的设备在允许的情况下使用指纹进行授权,但与面部身份验证相同。如果用户允许面部和指纹身份验证 biometricPrompt 用于身份验证面部识别。我只需要允许指纹,如果用户不允许指纹但面部是,我需要阻止它。
文档告诉我这个(来自docs)

...但没有任何指示,我在源代码中找不到任何关于定制的信息。
我的启动身份验证对话框代码在这里
BiometricPrompt.Builder(context)
.setTitle(biometricBuilder.title ?: "")
.setSubtitle(biometricBuilder.subtitle ?: "")
.setDescription(biometricBuilder.description ?: "")
.setNegativeButton(biometricBuilder.negativeButtonText ?: "",
context.mainExecutor, DialogInterface.OnClickListener { dialogInterface, i -> biometricCallback.onAuthenticationCancelled() })
.build()
.authenticate(CancellationSignal(), context.mainExecutor,
BiometricCallbackV28(biometricCallback))
Run Code Online (Sandbox Code Playgroud)
谢谢你的帮助
android biometrics android-fingerprint-api facial-identification android-9.0-pie
有没有办法模拟或模拟FingerprintManager.authenticate()?我想为我的指纹验证器编写检测测试.
我很好,如果有一个限制的解决方案,测试可以在模拟器或设备上运行.我使用JUnit 4.12.
你知道华为P9 lite是否支持指纹?
是否可以使用Android 6.0指纹API或通过一些自定义专有API(华为SDK)支持?
我们正在评估购买一些智能手机,我们想知道这个特定设备如何支持此功能.
我假设在marshmallow支持指纹API之前没有带OS的手机.
我的问题是:
(a)使用棉花糖发布的所有/任何三星手机都支持android指纹API
(b)操作系统升级为棉花糖的三星手机是否支持Android指纹API?
我读过这些:
在Samsung S5上使用Android 6.0 Fingerprint API时未检测到指纹扫描程序
对于Samsung Note 4,Android FingerPrint API isHardwareDetected返回false
但没有明确的答案.三星的网站还提到所有三星设备都支持Pass SDK,但没有提到android指纹API支持
android version hardware-interface samsung-mobile-sdk android-fingerprint-api
我尝试使用Google示例(BasicAndroidKeyStore)生成密钥对.我做的唯一修改是设置setUserAuthenticationRequired(true)在KeyGenParameterSpec.Builder.
我认为它可以在带有嵌入式指纹扫描仪的设备上正常工作,但是在OnePlus One上运行(在Android 6.0下工作),我得到以下异常:
At least one fingerprint must be enrolled to create keys requiring user authentication for every use
手机确实设置了锁定屏幕以使用该模式,但显然它需要指纹进行身份验证.知道如何在没有实际指纹识别器的情况下使用API 23密钥库吗?
android android-keystore android-security android-fingerprint-api
我正在测试带有指纹手势的Pixel设备上的可访问性.我试图使用FingerprintGestureController获取手势回调,但即使在我从Settings-> Accessibility打开此应用程序的辅助功能后,也从未获得任何手势.isGestureDetectionAvailable()总是向我返回false.有人可以请帮助.
这是代码:
my_gesture_service.xml
<accessibility-service xmlns:android="http://schemas.android.com/apk/res/android"
android:accessibilityFeedbackType="feedbackGeneric"
android:accessibilityFlags="flagDefault"
android:canRequestFingerprintGestures="true" />
Run Code Online (Sandbox Code Playgroud)
AndroidManifest.xml中
<uses-feature android:name="android.hardware.fingerprint"/>
<uses-permission android:name="android.permission.USE_FINGERPRINT" />
<uses-permission android:name="android.permission.BIND_ACCESSIBILITY_SERVICE"/>
<service
android:name="android.gestures.MyService"
android:label="@string/app_name"
android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE">
<intent-filter>
<action android:name="android.accessibilityservice.AccessibilityService" />
</intent-filter>
<meta-data
android:name="android.accessibilityservice"
android:resource="@xml/my_gesture_service" />
</service>
Run Code Online (Sandbox Code Playgroud)
MyService.java
public class MyService extends AccessibilityService {
private static final String TAG = MyService.class.getSimpleName();
@Override
public void onAccessibilityEvent(AccessibilityEvent accessibilityEvent) {
Log.d(TAG, "onAccessibilityEvent");
}
@Override
public void onInterrupt() {
Log.d(TAG, "onInterrupt");
}
@Override
protected boolean onGesture(int gestureId) {
Log.d(TAG, "onGesture " + gestureId);
return super.onGesture(gestureId);
}
@Override
protected boolean …Run Code Online (Sandbox Code Playgroud) android android-gesture android-accessibility android-fingerprint-api android-8.0-oreo
我正在编写一个应用程序功能,以使用Biometric指纹认证API 来认证用户。它与BiometricPrompt API的组合可以按预期工作。
通常,它会显示自己的UI对话框,因此可以在Android设备上进行统一。(来自Fingerprint Manager API的改进)
在一种设备测试方案中,我遇到了显示屏内(在屏幕上,例如Oneplus 6T设备)指纹支持而不是后部生物识别硬件选项的问题。
当我在其上运行应用程序时,在调用biometricPrompt.authenticate(..)而不是对话框时会显示显示指纹认证选项。可以,并由BiometricPrompt的内部API管理。
但是,这会给开发人员带来一些管理上的矛盾。
现在的问题是
编辑:我正在使用的代码参考:
import android.content.Context
import androidx.biometric.BiometricPrompt
import androidx.fragment.app.FragmentActivity
import java.lang.Exception
import java.util.concurrent.Executors
import javax.crypto.Cipher
class BiometricAuthenticationManager(private val context: Context) :
BiometricPrompt.AuthenticationCallback() {
private var biometricPrompt: BiometricPrompt? = null
override fun onAuthenticationError(errorCode: Int, errString: CharSequence) {
super.onAuthenticationError(errorCode, errString)
biometricPrompt?.cancelAuthentication()
}
override fun onAuthenticationSucceeded(result: BiometricPrompt.AuthenticationResult) {
super.onAuthenticationSucceeded(result)
}
override fun onAuthenticationFailed() {
super.onAuthenticationFailed()
}
fun init(cipher: Cipher, promptInfo: BiometricPrompt.PromptInfo) { …Run Code Online (Sandbox Code Playgroud) 我试图在用户通过Android M指纹API进行身份验证后解密加密文本.我一直在尝试遵循Android安全示例以及KeyGenParameterSpec文档中提供的示例.我已经能够成功地加密与公钥的文本,但是当我打电话cipher.doFinal用Cipher在使用私有密钥DECRYPT_MODE,我得到一个KeyStoreException"未知错误":
03-15 10:06:58.074 14702-14702/com.example.app E/LoginFragment: Failed to decrypt password
javax.crypto.IllegalBlockSizeException
at android.security.keystore.AndroidKeyStoreCipherSpiBase.engineDoFinal(AndroidKeyStoreCipherSpiBase.java:486)
at javax.crypto.Cipher.doFinal(Cipher.java:1502)
at com.example.app.ui.fragment.util.LoginFragment.onAuthenticationSucceeded(LoginFragment.java:251)
at com.example.app.ui.controller.FingerprintCallback.onAuthenticationSucceeded(FingerprintCallback.java:21)
at android.support.v4.hardware.fingerprint.FingerprintManagerCompat$Api23FingerprintManagerCompatImpl$1.onAuthenticationSucceeded(FingerprintManagerCompat.java:301)
at android.support.v4.hardware.fingerprint.FingerprintManagerCompatApi23$1.onAuthenticationSucceeded(FingerprintManagerCompatApi23.java:96)
at android.hardware.fingerprint.FingerprintManager$MyHandler.sendAuthenticatedSucceeded(FingerprintManager.java:805)
at android.hardware.fingerprint.FingerprintManager$MyHandler.handleMessage(FingerprintManager.java:757)
at android.os.Handler.dispatchMessage(Handler.java:102)
at android.os.Looper.loop(Looper.java:148)
at android.app.ActivityThread.main(ActivityThread.java:5417)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
Caused by: android.security.KeyStoreException: Unknown error
at android.security.KeyStore.getKeyStoreException(KeyStore.java:632)
at android.security.keystore.KeyStoreCryptoOperationChunkedStreamer.doFinal(KeyStoreCryptoOperationChunkedStreamer.java:224)
at android.security.keystore.AndroidKeyStoreCipherSpiBase.engineDoFinal(AndroidKeyStoreCipherSpiBase.java:473)
at javax.crypto.Cipher.doFinal(Cipher.java:1502)
at com.example.app.ui.fragment.util.LoginFragment.onAuthenticationSucceeded(LoginFragment.java:251)
at com.example.app.ui.controller.FingerprintCallback.onAuthenticationSucceeded(FingerprintCallback.java:21)
at android.support.v4.hardware.fingerprint.FingerprintManagerCompat$Api23FingerprintManagerCompatImpl$1.onAuthenticationSucceeded(FingerprintManagerCompat.java:301)
at android.support.v4.hardware.fingerprint.FingerprintManagerCompatApi23$1.onAuthenticationSucceeded(FingerprintManagerCompatApi23.java:96)
at android.hardware.fingerprint.FingerprintManager$MyHandler.sendAuthenticatedSucceeded(FingerprintManager.java:805)
at android.hardware.fingerprint.FingerprintManager$MyHandler.handleMessage(FingerprintManager.java:757)
at android.os.Handler.dispatchMessage(Handler.java:102)
at …Run Code Online (Sandbox Code Playgroud) encryption android keystore android-keystore android-fingerprint-api
众所周知,从 android 9.0 开始,android 引入了BiometricPrompt Api,以在越来越多的生物识别传感器(例如指纹、Face ID 等)中提供标准的身份验证体验。
现在有了这个新的 BiometricPrompt Api,用户可以通过指纹、面部扫描仪或虹膜扫描进行身份验证(取决于他们的生物识别偏好)。BiometricPrompt api 会处理这个问题,它会通过各种回调通知我们。
下面是我显示生物识别提示的代码。
biometricPrompt = new BiometricPrompt.Builder(context)
.setTitle("FingerPrint Authentication")
.setSubtitle("Login via Fingerprint")
.setDescription("Touch Fingerprint Sensor")
.setNegativeButton("Cancel", context.getMainExecutor(),
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
Log.d(TAG,"Cancelled");
}
})
.build();
Run Code Online (Sandbox Code Playgroud)
现在,如果您看到我的代码,我将标题设置为Fingerprint Authentication。现在在设备设置中,如果用户已将生物识别首选项设置为面容 ID而不是指纹,那么此biometricPrompt将通过面容ID对用户进行身份验证,即使用户一直触摸传感器,指纹传感器也不会工作。这会造成混淆,因为生物识别标题说“指纹身份验证”和用户实际上是通过faceID 进行身份验证的
有什么方法可以让我们知道用户选择了什么生物识别偏好(例如指纹或面容 ID)?因此,基于该偏好,我可以在 BiometricPrompt 上显示适当的消息,这样用户就不会感到困惑。
我已经从 BiometricPrompt 探索了所有 api,但可以找到任何与 BiometricPreference 相关的东西。
任何帮助将不胜感激。
android samsung-mobile android-fingerprint-api android-9.0-pie android-biometric-prompt
android ×10
biometrics ×1
encryption ×1
fingerprint ×1
huawei ×1
junit ×1
keystore ×1
unit-testing ×1
version ×1