Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Marshmallow Fingerprint Scanner Hardware Presence

I am looking to get started with the Marshmallow Fingerprint Authentication API. I understand that to ask for permission, I must use the following method:

ContextCompat.checkSelfPermission(getContext(), Manifest.permission.USE_FINGERPRINT);

And I must check if the device is running API level 23 or higher. But before I ask for permission, I would like to check if the device actually has a fingerprint scanner to begin with. I found the following two methods to do this check:

FingerprintManager manager = (FingerprintManager) getSystemService(Context.FINGERPRINT_SERVICE);

manager.isHardwareDetected();

manager.hasEnrolledFingerprints();

But both methods require USE_FINGERPRINT permission to be called at all. Why would I want to ask for permission to use a fingerprint scanner that I do not even know exists? Are there any other methods to find out if a scanner exists? Or is the only way to ask for permission first?

like image 364
Bryan Avatar asked Feb 09 '16 20:02

Bryan


2 Answers

I just found the class FingerprintManagerCompat, which does exactly what you would expect:

A class that coordinates access to the fingerprint hardware.

On platforms before M, this class behaves as there would be no fingerprint hardware available.

The same methods from FingerprintManager in this class do not require USE_FINGERPRINT permission, enabling you to call them before you ask for USE_FINGERPRINT permission.

FingerprintManagerCompat manager = FingerprintManagerCompat.from(mContext);

manager.isHardwareDetected();
manager.hasEnrolledFingerprints();

These methods will also yield the expected false results on pre-Marshmallow devices.

like image 71
Bryan Avatar answered Nov 25 '22 03:11

Bryan


Try hasSystemFeature(PackageManager.FEATURE_FINGERPRINT) on a PackageManager instance (you can get one from calling getPackageManager() on any handy Context).

like image 25
CommonsWare Avatar answered Nov 25 '22 02:11

CommonsWare