我正在尝试实现指纹,但不确定是否是问题,但是在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;
}
这是正常的。指纹许可没有标记为危险,因此您不必要求访问它。如果您在清单中声明许可,则会自动授予它。
这是因为您无法直接访问传感器,并且所有调用的调用都是有限的指纹指纹的槽。
编辑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();
}
}
我认为它对您有用。谢谢!