English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Let me talk about the differences between these two methods first
The first method:
After the call is successful, it will not let you unlock with your fingerprint, but will redirect you to the gesture unlock page when you set the fingerprint unlock
Second type:
After the call is successful, it is to perform fingerprint unlocking. If you do not call it, you can directly put your finger on the metal induction ring for fingerprint verification
Everyone can choose according to their needs
Alright, let's light up the code then
The first method:
xml layout: One text display and one button (no explanation)
MainActivity.java source code
public class MainActivity extends FragmentActivity { FingerprintManager manager; KeyguardManager mKeyManager; private final static int REQUEST_CODE_CONFIRM_DEVICE_CREDENTIALS = 0; private final static String TAG = "finger_log"; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //1: First, get the manager of fingerprint recognition and see if the way of acquisition feels like a mathematical formula. (xxx manager)= this.getSystemService(Context.xxx service); manager = (FingerprintManager) this.getSystemService(Context.FINGERPRINT_SERVICE); mKeyManager = (KeyguardManager) this.getSystemService(Context.KEYGUARD_SERVICE); // 2 Initialize the button and set the listener // Listening for listening, what are you listening for? It must be to see if this phone has the fingerprint recognition feature, so let's see if isFinger() is working. Button btn_finger = (Button) findViewById(R.id.btn_activity_main_finger); btn_finger.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (isFinger()) { Toast.makeText(MainActivity.this, "Please perform fingerprint recognition", Toast.LENGTH_LONG).show(); Log(TAG, "keyi"); startListening(null); } } }); } public boolean isFinger() { //An error will be reported if this is not present in Android Studio if (ActivityCompat.checkSelfPermission(this, Manifest.permission.USE_FINGERPRINT) != PackageManager.PERMISSION_GRANTED) { Toast.makeText(this, "No fingerprint recognition permission", Toast.LENGTH_SHORT).show(); return false; } Log(TAG, "Fingerprint permission exists"); //Determine if the hardware supports fingerprint recognition if (!manager.isHardwareDetected()) { Toast.makeText(this, "No fingerprint recognition module exists", Toast.LENGTH_SHORT).show(); return false; } Log(TAG, "Fingerprint module exists"); //Determine whether the lock screen password is enabled if (!mKeyManager.isKeyguardSecure()) { Toast.makeText(this, "No lock screen password is enabled", Toast.LENGTH_SHORT).show(); return false; } Log(TAG, "Lock screen password is enabled"); //Determine if fingerprint recording is available if (!manager.hasEnrolledFingerprints()) { Toast.makeText(this, "No fingerprint recorded", Toast.LENGTH_SHORT).show(); return false; } Log(TAG, "Fingerprint recorded"); return true; } CancellationSignal mCancellationSignal = new CancellationSignal(); //Callback method FingerprintManager.AuthenticationCallback mSelfCancelled = new FingerprintManager.AuthenticationCallback() { @Override public void onAuthenticationError(int errorCode, CharSequence errString) { //After multiple fingerprint password verification errors, enter this method; and, do not call fingerprint verification in a short period of time Toast.makeText(MainActivity.this, errString, Toast.LENGTH_SHORT).show(); showAuthenticationScreen(); } @Override public void onAuthenticationHelp(int helpCode, CharSequence helpString) { Toast.makeText(MainActivity.this, helpString, Toast.LENGTH_SHORT).show(); } @Override public void onAuthenticationSucceeded(FingerprintManager.AuthenticationResult result) { Toast.makeText(MainActivity.this, "Fingerprint recognition succeeded", Toast.LENGTH_SHORT).show(); } @Override public void onAuthenticationFailed() { Toast.makeText(MainActivity.this, "Fingerprint recognition failed", Toast.LENGTH_SHORT).show(); } }; public void startListening(FingerprintManager.CryptoObject cryptoObject) { //An error will be reported if this is not present in Android Studio if (ActivityCompat.checkSelfPermission(this, Manifest.permission.USE_FINGERPRINT) != PackageManager.PERMISSION_GRANTED) { Toast.makeText(this, "No fingerprint recognition permission", Toast.LENGTH_SHORT).show(); return; } manager.authenticate(cryptoObject, mCancellationSignal, 0, mSelfCancelled, null); } /** * Lock screen password */ private void showAuthenticationScreen() { Intent intent = mKeyManager.createConfirmDeviceCredentialIntent("finger", "test fingerprint recognition"); if (intent != null) { startActivityForResult(intent, REQUEST_CODE_CONFIRM_DEVICE_CREDENTIALS); } } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == REQUEST_CODE_CONFIRM_DEVICE_CREDENTIALS) { // Challenge completed, proceed with using cipher if (resultCode == RESULT_OK) { Toast.makeText(this, "Recognition successful", Toast.LENGTH_SHORT).show(); } else { Toast.makeText(this, "Recognition failed", Toast.LENGTH_SHORT).show(); } } } private void Log(String tag, String msg) { Log.d(tag, msg); } }
===================================
Second type:
1:xml: Layout with one text prompt and two buttons (1: Start recognition 2: Cancel recognition)
2: We will put the business operation into a FingerprintController class
private static FingerprintController sSingleton = null; private Context mContext; private FingerprintManagerCompat manager; private static final String TAG = "FingerprintController"; private static final String PERMISSION = "android.permission.USE_FINGERPRINT"; //Successful public static final int FINGER_SUCCESS = 0; //Hardware is not supported public static final int FINGER_ERROR_NO_HARDWARE = 1; //No permission has been applied public static final int FINGER_ERROR_NO_PERMISSION = 2; //The user has not granted permissions //Protection level: normal //The level of fingerprint permission is normal, theoretically no dynamic permission authentication is needed public static final int FINGER_ERROR_NO_USER_PERMISSION = 3; //The user has no stored fingerprints public static final int FINGER_ERROR_NO_FINGER = 4; //Cancel fingerprint recognition private CancellationSignal cancellationSignal; private FingerAuthListener mAuthListener; public static synchronized FingerprintController getInstance(Context context) { if (sSingleton == null) { sSingleton = new FingerprintController(context); } return sSingleton; } public FingerprintController(Context context) { mContext = context; manager = FingerprintManagerCompat.from(this.mContext); } /** * Start fingerprint recognition * After too many failed attempts, a certain amount of time is needed before it can be restarted */ public void startFingerAuth() { if (null == cancellationSignal) { cancellationSignal = new CancellationSignal(); } manager.authenticate(null, 0, cancellationSignal, new FingerAuthCallBack(), null); } /** * Cancel fingerprint recognition */ public void cancelFingerAuth() { if (cancellationSignal != null) { cancellationSignal.cancel(); if (mAuthListener != null) mAuthListener.cancel(); } } /** * Fingerprint recognition callback */ public class FingerAuthCallBack extends FingerprintManagerCompat.AuthenticationCallback { // This function is called back when an error occurs, such as when multiple attempts all fail, errString is the error information @Override public void onAuthenticationError(int errMsgId, CharSequence errString) { // Log.d(TAG, "onAuthenticationError: ", + errString); if (null != mAuthListener) mAuthListener.error(errString.toString()); } // This function is called back when the fingerprint verification fails, after which multiple attempts are allowed, and the sensor work will stop for a period of time after too many failures @Override public void onAuthenticationFailed() { if (null != mAuthListener) mAuthListener.failure(); } @Override public void onAuthenticationHelp(int helpMsgId, CharSequence helpString) { if (null != mAuthListener) Log.e("helpMsgId", helpMsgId+"" Log.e("helpString", helpString.toString()); mAuthListener.help(helpString.toString()); } // This function is called back when the verified fingerprint is successful, and then the fingerprint sensor is no longer monitored @Override public void onAuthenticationSucceeded(FingerprintManagerCompat.AuthenticationResult result) { if (null != mAuthListener) mAuthListener.success(); } } /** * Check if fingerprint unlock is available * * @return Status */ public int checkFingerEnable() { if (null == manager) { manager = FingerprintManagerCompat.from(mContext); } if (!isAppPermissionEnable()) { return FINGER_ERROR_NO_PERMISSION; } if (!manager.isHardwareDetected()) { return FINGER_ERROR_NO_HARDWARE; } if (!manager.hasEnrolledFingerprints()) { return FINGER_ERROR_NO_FINGER; } if (!isUserPermissionEnable()) { return FINGER_ERROR_NO_USER_PERMISSION; } return FINGER_SUCCESS; } /** * Whether the permission is declared */ private boolean isAppPermissionEnable() { PackageManager pm = mContext.getPackageManager(); if (pm == null) { Log.w(TAG, "can't get packagemanager"); return true; } try { return PackageManager.PERMISSION_GRANTED == pm.checkPermission(PREMISSION, mContext.getPackageName()); } catch (Exception e) { Log.w(TAG, "can't checkt Permission "); + e.getMessage()); return true; } } /** * Whether dynamic permissions are available, theoretically no verification is needed */ private boolean isUserPermissionEnable() { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { return PackageManager.PERMISSION_GRANTED == mContext.checkSelfPermission(Manifest.permission.USE_FINGERPRINT); } return true; } public void setAuthListener(FingerAuthListener authListener) { mAuthListener = authListener; } public interface FingerAuthListener { void success(); void error(String error); void help(String msg); void cancel(); void failure(); } }
3:Implement the FingerprintController.FingerAuthListener callback interface in main
private int code = FingerprintController.FINGER_SUCCESS; private TextView toast; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); toast = (TextView) findViewById(R.id.toast); code = FingerprintController.getInstance(this).checkFingerEnable(); if (code == FingerprintController.FINGER_SUCCESS) { FingerprintController.getInstance(this).setAuthListener(this); setToast("Fingerprint recognition can be started"); } else { switch (code) { case FingerprintController.FINGER_ERROR_NO_HARDWARE: setToast("This device does not support fingerprint recognition"); break; case FingerprintController.FINGER_ERROR_NO_PERMISSION: setToast("The current application does not have fingerprint recognition permissions"); break; case FingerprintController.FINGER_ERROR_NO_FINGER: setToast("The current device does not have fingerprints recorded, please go to record fingerprints"); break; } } } public void start(View view) { if (code == FingerprintController.FINGER_SUCCESS) { FingerprintController.getInstance(this).startFingerAuth(); setToast("Start fingerprint recognition"); } } public void cancel(View view) { if (code == FingerprintController.FINGER_SUCCESS) { FingerprintController.getInstance(this).cancelFingerAuth(); } } @Override public void success() { setToast("Recognition successful"); } @Override public void error(String error) { setToast(error); } @Override public void help(String msg) { setToast(msg); } @Override public void cancel() { setToast("Cancel fingerprint recognition"); } @Override public void failure() { setToast("Fingerprint recognition failed"); } public void setToast(String msg) { toast.setText("Hint:") + msg); }
That's all for this article. I hope it will be helpful to everyone's learning and that everyone will support the Yelling Tutorial more.
Declaration: The content of this article is from the Internet, and the copyright belongs to the original author. The content is contributed and uploaded by Internet users spontaneously. This website does not own the copyright, has not been manually edited, and does not assume any relevant legal liability. If you find any content suspected of copyright infringement, please send an email to: notice#oldtoolbag.com (Please replace # with @ when sending an email to report, and provide relevant evidence. Once verified, this site will immediately delete the content suspected of infringement.)