标签: android-fingerprint-api

Android UI测试指纹与Espresso

我有一个Android指纹实现工作,我希望用Espresso添加UI测试.我无法找到解决方案的一个问题是如何模拟手指的扫描.有一个adb命令 adb -e emu finger touch可以在模拟器上运行.

关于如何将这样的东西与Espresso整合的任何想法?

android android-espresso android-fingerprint-api

12
推荐指数
1
解决办法
1353
查看次数

自定义生物识别提示

我在 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

12
推荐指数
1
解决办法
5237
查看次数

在Android测试中模拟FingerprintManager

有没有办法模拟或模拟FingerprintManager.authenticate()?我想为我的指纹验证器编写检测测试.

我很好,如果有一个限制的解决方案,测试可以在模拟器或设备上运行.我使用JUnit 4.12.

junit android unit-testing android-fingerprint-api

11
推荐指数
1
解决办法
635
查看次数

华为P9 lite指纹支持

你知道华为P9 lite是否支持指纹?
是否可以使用Android 6.0指纹API或通过一些自定义专有API(华为SDK)支持?

我们正在评估购买一些智能手机,我们想知道这个特定设备如何支持此功能.

android fingerprint android-fingerprint-api huawei

10
推荐指数
1
解决办法
959
查看次数

哪些三星设备不支持Android的原生指纹API?

我假设在marshmallow支持指纹API之前没有带OS的手机.

我的问题是:

(a)使用棉花糖发布的所有/任何三星手机都支持android指纹API

(b)操作系统升级为棉花糖的三星手机是否支持Android指纹API?

我读过这些:

在Samsung S5上使用Android 6.0 Fingerprint API时未检测到指纹扫描程序

三星galaxy note 4指纹未找到

对于Samsung Note 4,Android FingerPrint API isHardwareDetected返回false

指纹传感器6.0以上的设备未使用Android指纹SDK

但没有明确的答案.三星的网站还提到所有三星设备都支持Pass SDK,但没有提到android指纹API支持

android version hardware-interface samsung-mobile-sdk android-fingerprint-api

10
推荐指数
1
解决办法
1979
查看次数

Android Key Store API 23,使用setUserAuthenticationRequired而不使用指纹扫描程序

我尝试使用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

9
推荐指数
1
解决办法
2274
查看次数

Android O - 指纹手势回调无法正常工作

我正在测试带有指纹手势的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

9
推荐指数
1
解决办法
953
查看次数

如何确定设备是否具有显示屏生物特征指纹支持?

我正在编写一个应用程序功能,以使用Biometric指纹认证API 来认证用户。它与BiometricPrompt API的组合可以按预期工作。

通常,它会显示自己的UI对话框,因此可以在Android设备上进行统一。(来自Fingerprint Manager API的改进)

在一种设备测试方案中,我遇到了显示屏内(在屏幕上,例如Oneplus 6T设备)指纹支持而不是后部生物识别硬件选项的问题。

当我在其上运行应用程序时,在调用biometricPrompt.authenticate(..)而不是对话框时会显示显示指纹认证选项。可以,并由BiometricPrompt的内部API管理。

但是,这会给开发人员带来一些管理上的矛盾。

  1. 当提供内置身份验证对话框时,所有回退错误将显示在对话框本身中。
  2. 但是在显示身份验证的情况下,我没有找到一种方法来自行显示错误消息。而且我必须处理这种后备并以自定义方式显示。

现在的问题是

  1. 有没有一种方法可以通过显示中的验证视图组件来管理/显示消息。
  2. 如何识别设备是否支持设备内生物特征认证。

编辑:我正在使用的代码参考:

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 android-fingerprint-api in-display-fingerprint

9
推荐指数
1
解决办法
353
查看次数

Android KeyStoreException未知错误

我试图在用户通过Android M指纹API进行身份验证后解密加密文本.我一直在尝试遵循Android安全示例以及KeyGenParameterSpec文档中提供的示例.我已经能够成功地加密与公钥的文本,但是当我打电话cipher.doFinalCipher在使用私有密钥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

8
推荐指数
1
解决办法
4093
查看次数

如何通过 Biometric api 检查用户的 Bio-Metric 偏好?

众所周知,从 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

8
推荐指数
1
解决办法
3698
查看次数