我正在检查代码清单中来自清单的所有权限。现在,我添加了USE_BIOMETRIC权限,因为我想使用指纹,但是未授予此权限,我也不知道为什么。
我知道USE_BIOMETRIC是正常权限,因此在清单中时不应该询问它,应该授予它,但不是。
正在检查其他权限是否正常,是否已授予或要求所有权限,只有这一权限无效。
我正在2部手机上测试应用程序,使用Android 8.0和API 26模拟Google像素,并使用Android 8.1和API 27模拟物理小米Redmi 5。
两款手机都使用指纹来解锁屏幕。
清单中的权限:
<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)
}
}
}
谢谢您的帮助