android Fingerprint 验证

最近一个需求是要验证指纹传感器的可用性(在没有录入指纹时也能验证),所以考虑通过录入指纹来验证传感器的可用性;做个代码的记录方便以后可用。

判断设备是否支持指纹

@RequiresApi(api = Build.VERSION_CODES.M)
    public static FingerprintManager getFingerprintManagerOrNull() {
        if (getApp().getPackageManager().hasSystemFeature(PackageManager.FEATURE_FINGERPRINT)) {
            return getApp().getSystemService(FingerprintManager.class);
        } else {
            return null;
        }
    }

开启指纹录入

long auth = this.mFingerprintManager.preEnroll();
byte[] arrayOfByte = getBytes(auth);
for (int i = 0; i < arrayOfByte.length; i++) {
            mToken[(i + 1)] = (byte) arrayOfByte[i];
        }
mEnrollmentCancel = new CancellationSignal();
mFingerprintManager.enroll(mToken, mEnrollmentCancel, 0, UserHandle.myUserId(), new FingerprintManager.EnrollmentCallback() {
            @Override
            public void onEnrollmentError(int errMsgId, CharSequence errString) {
                super.onEnrollmentError(errMsgId, errString);
                Log.v("lmjssjj", "Please try again errMsgId:"+errMsgId+"  errString:"+errString);
            }

            @Override
            public void onEnrollmentHelp(int helpMsgId, CharSequence helpString) {
                super.onEnrollmentHelp(helpMsgId, helpString);
                Log.v("lmjssjj", "helpMsgId:"+helpMsgId+"  helpString:"+helpString);
            }

            @Override
            public void onEnrollmentProgress(int remaining) {
                super.onEnrollmentProgress(remaining);
                Log.v("lmjssjj", "success");
            }
        });

  public byte[] getBytes(long auth)
    {
        byte[] arrayOfByte = new byte[28];
        arrayOfByte[0] = (byte)(byte)(int)(auth & 0xFF);
        arrayOfByte[1] = (byte)(byte)(int)(auth >> 8 & 0xFF);
        arrayOfByte[2] = (byte)(byte)(int)(auth >> 16 & 0xFF);
        arrayOfByte[3] = (byte)(byte)(int)(auth >> 24 & 0xFF);
        arrayOfByte[4] = (byte)(byte)(int)(auth >> 32 & 0xFF);
        arrayOfByte[5] = (byte)(byte)(int)(auth >> 40 & 0xFF);
        arrayOfByte[6] = (byte)(byte)(int)(auth >> 48 & 0xFF);
        arrayOfByte[7] = (byte)(byte)(int)(auth >> 56 & 0xFF);
        arrayOfByte[24] = (byte)0;
        arrayOfByte[25] = (byte)0;
        arrayOfByte[26] = (byte)0;
        arrayOfByte[27] = (byte)2;
        return arrayOfByte;
    }

猜你喜欢

转载自blog.csdn.net/lmjssjj/article/details/81112874