フィンガープリントを実装しようとしていますが、それが問題かどうかはわかりませんが、Android Nougatでは、USE_FINGERPRINTのアクセス許可が要求されることはありません。そのため、ダイアログポップアップが表示されません。 ACCESS_FINE_LOCATIONとそれは機能します(アプリは許可または拒否を要求します)。
私のマニフェストでは:
<uses-permission Android:name="Android.permission.USE_FINGERPRINT" />
<uses-feature
Android:name="Android.hardware.fingerprint"
Android:required="false" />
フラグメント内
if (ActivityCompat.checkSelfPermission(getActivity(),Manifest.permission.USE_FINGERPRINT) != PackageManager.PERMISSION_GRANTED) {
Log.v(TAG, "NO permissions USE_FINGERPRINT");
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
Log.v(TAG, "No requestPermissions");
ActivityCompat.requestPermissions(getActivity(), new String[]{Manifest.permission.USE_FINGERPRINT}, FingerprintHandler.FINGERPRINT_PERMISSION);
}
return;
}
これは正常です。指紋認証 危険としてマークされていません したがって、指紋認証へのアクセスを要求する必要はありません。マニフェストで許可を宣言すると、自動的に付与されます。
これは、センサーに直接アクセスできず、センサーへのすべての呼び出しが、多少制限されているFingerprintManagerを介してプロキシされるためです。
2019年3月編集:USE_FINGERPRINTはUSE_BIOMETRICを優先して非推奨になりましたが、引き続き使用できます。 USE_BIOMETRICは、マニフェストでも宣言することで付与されます。
保護レベル(通常、危険ではない)のため、許可を求めることはありません。そのため、アクセスは、ユーザーの知らないうちに、要求するだけで自動的に許可されます。
次の手順に従います。
許可の上のマニフェストにこれを追加します。
<uses-feature Android:name="Android.hardware.fingerprint" Android:required="true" />
電話のハードウェアリソースにアクセスするには、常に許可が必要です。だからそれはあなたのためにそれをします。
次に、アクティビティで、次のコードを実行します。
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
keyguardManager = (KeyguardManager) getSystemService(KEYGUARD_SERVICE);
fingerprintManager = (FingerprintManager) getSystemService(FINGERPRINT_SERVICE);
if (!fingerprintManager.isHardwareDetected()) {
Toast.makeText(getApplicationContext(), "Your device doesn't support fingerprint authentication", Toast.LENGTH_SHORT).show();
}
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.USE_FINGERPRINT) != PackageManager.PERMISSION_GRANTED) {
Toast.makeText(getApplicationContext(), "Please enable the fingerprint permission", Toast.LENGTH_SHORT).show();
ActivityCompat.requestPermissions(getActivity(), new String[]{Manifest.permission.USE_FINGERPRINT}, FingerprintHandler.FINGERPRINT_PERMISSION);
}
if (!fingerprintManager.hasEnrolledFingerprints()) {
Toast.makeText(getApplicationContext(), "Your Device has no registered Fingerprints! Please register atleast one in your Device settings", Toast.LENGTH_LONG).show();
}
}
私はそれがあなたのために働くと思います。ありがとう!