web-dev-qa-db-ja.com

Android nougatUSE_FINGERPRINTパーミッション

フィンガープリントを実装しようとしていますが、それが問題かどうかはわかりませんが、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;
    }
6
returnvoid

これは正常です。指紋認証 危険としてマークされていません したがって、指紋認証へのアクセスを要求する必要はありません。マニフェストで許可を宣言すると、自動的に付与されます。

これは、センサーに直接アクセスできず、センサーへのすべての呼び出しが、多少制限されているFingerprintManagerを介してプロキシされるためです。

2019年3月編集:USE_FINGERPRINTはUSE_BIOMETRICを優先して非推奨になりましたが、引き続き使用できます。 USE_BIOMETRICは、マニフェストでも宣言することで付与されます。

17
Ch4t4r

保護レベル(通常、危険ではない)のため、許可を求めることはありません。そのため、アクセスは、ユーザーの知らないうちに、要求するだけで自動的に許可されます。

次の手順に従います。

許可の上のマニフェストにこれを追加します。

 <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();
        }
}

私はそれがあなたのために働くと思います。ありがとう!

1
Ankit Patidar