6

Marshmallow Fingerprint Authentication API の使用を開始しようとしています。許可を求めるには、次の方法を使用する必要があることを理解しています。

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

そして、デバイスが API レベル 23 以上を実行しているかどうかを確認する必要があります。しかし、許可を求める前に、そもそもデバイスに実際に指紋スキャナーがあるかどうかを確認したいと思います。このチェックを行うには、次の2つの方法が見つかりました。

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

manager.isHardwareDetected();

manager.hasEnrolledFingerprints();

ただし、どちらの方法USE_FINGERPRINTでも、呼び出すにはアクセス許可が必要です。存在すら知らない指紋スキャナーを使用する許可を求める必要があるのはなぜですか? スキャナーが存在するかどうかを調べる他の方法はありますか? または、最初に許可を求める唯一の方法ですか?

4

4 に答える 4

11

FingerprintManagerCompat私はちょうどあなたが期待することを正確に行うクラスを見つけました:

指紋ハードウェアへのアクセスを調整するクラス。

M より前のプラットフォームでは、このクラスは利用可能な指紋ハードウェアがないように動作します。

このクラスの同じメソッドは許可をFingerprintManager必要としないため、USE_FINGERPRINT許可を求める前に呼び出すことができますUSE_FINGERPRINT

FingerprintManagerCompat manager = FingerprintManagerCompat.from(mContext);

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

これらのメソッドは、Marshmallow より前のデバイスでも予想される偽の結果をもたらします。

于 2016-03-10T17:06:52.607 に答える
6

インスタンスを試してみてくださいhasSystemFeature(PackageManager.FEATURE_FINGERPRINT)( handyPackageManagerを呼び出してインスタンスを取得できます)。getPackageManager()Context

于 2016-02-09T21:03:04.220 に答える
1

@CommonsWare は重要なことに言及しましhasSystemFeatureた。安全のために、Java を使用している場合は、API 23 以降を実行しているデバイスでも、呼び出し時hasSystemFeatureに null のFingerprintManager戻り値を呼び出すか確認してください。getSystermServiceKotlin の場合、呼び出し時にオプションの変数を使用し、スマート キャストをgetSystemService実行して、Fingerprint ハードウェアがなくても API 23 以降を実行しているデバイスで予期しないクラッシュが発生するのを回避します。

于 2018-07-09T18:30:16.830 に答える