Я проверяю все разрешения из Манифеста с кодом ниже.Теперь я добавил разрешение USE_BIOMETRIC, потому что я хочу использовать отпечаток пальца, но это разрешение не предоставлено, и я не знаю почему.
Я знаю, что USE_BIOMETRIC - это нормальное разрешение, поэтому его не следует спрашивать, и оно должно бытьпредоставляется, когда он находится в Манифесте, но это не так.
Проверка других разрешений работает, и все предоставляются или запрашиваются, только это не так.
Я тестирую приложение на 2телефоны, эмулированные пикселем Google с Android 8.0 и API 26 и физическим Xiaomi Redmi 5 с Android 8.1 и API 27.
Оба телефона используют отпечатки пальцев для разблокировки экрана.
Разрешения в манифесте:
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.SEND_SMS" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.USE_BIOMETRIC" />
Код, который загружает разрешения из манифеста и проверяет, предоставлено или нет:
fun checkAndRequestPermissions(): Boolean{
var listPermissionsNeeded = ArrayList<String>()
val permissions = retrievePermissions(activity.baseContext)
permissions.forEach {
if(ContextCompat.checkSelfPermission(activity.baseContext, it) != PackageManager.PERMISSION_GRANTED){
listPermissionsNeeded.add(it)
Log.d("Missing permission", it)
}
}
if (!listPermissionsNeeded.isEmpty()) {
val array = arrayOfNulls<String>(listPermissionsNeeded.size)
listPermissionsNeeded.toArray(array)
ActivityCompat.requestPermissions(activity, array, ConstantsStorage.ACTIVITY_REQUEST_PERMISSIONS_CODE)
return false
}
return true
}
companion object {
/**
* Retrieves permissions listed in the manifest file
* @param context Context
* @return Returns String array of permissions
*/
fun retrievePermissions(context: Context): Array<String> {
try {
return context
.packageManager
.getPackageInfo(context.packageName, PackageManager.GET_PERMISSIONS)
.requestedPermissions
} catch (e: PackageManager.NameNotFoundException) {
throw RuntimeException("This should have never happened.", e)
}
}
}
Спасибо за помощь