Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/400.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何通过android中的反射来识别经过身份验证的手指的存储ID_Java_Android_Android Fingerprint Api - Fatal编程技术网

Java 如何通过android中的反射来识别经过身份验证的手指的存储ID

Java 如何通过android中的反射来识别经过身份验证的手指的存储ID,java,android,android-fingerprint-api,Java,Android,Android Fingerprint Api,我是一个新手开发人员,试图创建一个android应用程序,供不同用户在一台设备上使用。我打算使用指纹认证来快速识别不同的用户 所以我在设备上注册了不同用户的指纹。因为我能够通过反射获得每个指纹的指纹存储ID列表(尽管不推荐也不支持)。以下是获取设备上所有指纹ID的工作代码: public void onAuthenticationSucceeded(FingerprintManager.AuthenticationResult result) { try { Me

我是一个新手开发人员,试图创建一个android应用程序,供不同用户在一台设备上使用。我打算使用指纹认证来快速识别不同的用户

所以我在设备上注册了不同用户的指纹。因为我能够通过反射获得每个指纹的指纹存储ID列表(尽管不推荐也不支持)。以下是获取设备上所有指纹ID的工作代码:

  public void onAuthenticationSucceeded(FingerprintManager.AuthenticationResult result) {

 try {
            Method method = FingerprintManager.class.getDeclaredMethod("getEnrolledFingerprints");
            Object obj = method.invoke(mFingerprintManager);
            if (obj != null) {
                Class<?> clazz = Class.forName("android.hardware.fingerprint.Fingerprint");
                Method getFingerId = clazz.getDeclaredMethod("getFingerId");
                for (int i = 0; i < ((List) obj).size(); i++) {
                    Object item = ((List) obj).get(i);
                    if (null == item) {
                        continue;
                    }

                    Log.d(TAG, "fingerId: " + getFingerId.invoke(item));
                }
            }
        } catch (NoSuchMethodException | IllegalAccessException | InvocationTargetException | ClassNotFoundException e) {
            e.printStackTrace();
        }


    }

在这一行代码中:

CharSequence name = (CharSequence) getName.invoke(fingerPrint);


非常感谢您的帮助。

您为什么要使用反射?这似乎增加了额外的复杂性。为什么不先在没有反射的情况下尝试一下,看看是否可以让它工作。请注意,您的代码在较新版本的Android上会失败,因为Android会阻止您的反射形式。而且,您试图通过反射使用的一些代码在较新版本的Android上已经不存在了。是的,我知道。该应用程序仅供内部使用,不打算以任何方式分发。还请注意,在API 28中,指纹管理器已被弃用。它被BiometricManager取代:@EJK反射是实现此目标的唯一方法
 java.lang.NullPointerException: null receiver
        at java.lang.reflect.Method.invoke(Native Method)
        at com.example.android.fingerprintdialog.FingerprintUiHelper.onAuthenticationSucceeded(FingerprintUiHelper.java:130)
CharSequence name = (CharSequence) getName.invoke(fingerPrint);