Android-未授权使用生物特征
我正在用下面的代码检查清单中的所有许可。现在我添加了使用生物识别权限,因为我想使用指纹,但这个权限没有被授予,我不知道为什么 我知道使用_生物特征识别是正常的许可,所以不应该要求它,当它出现在清单中时应该授予它,但事实并非如此 正在检查其他权限,并且所有权限都已授予或请求,只有此权限无效 我正在两部手机上测试应用程序,模拟了Android 8.0和API 26的谷歌像素,以及Android 8.1和API 27的物理小米红米5 两款手机都使用指纹解锁屏幕 清单中的许可:Android-未授权使用生物特征,android,kotlin,permissions,manifest,Android,Kotlin,Permissions,Manifest,我正在用下面的代码检查清单中的所有许可。现在我添加了使用生物识别权限,因为我想使用指纹,但这个权限没有被授予,我不知道为什么 我知道使用_生物特征识别是正常的许可,所以不应该要求它,当它出现在清单中时应该授予它,但事实并非如此 正在检查其他权限,并且所有权限都已授予或请求,只有此权限无效 我正在两部手机上测试应用程序,模拟了Android 8.0和API 26的谷歌像素,以及Android 8.1和API 27的物理小米红米5 两款手机都使用指纹解锁屏幕 清单中的许可: <uses-per
<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)
}
}
}
fun checkAndRequestPermissions():布尔值{
var listPermissionsNeed=ArrayList()
val权限=检索权限(activity.baseContext)
权限。forEach{
if(ContextCompat.checkSelfPermission(activity.baseContext,it)!=PackageManager.PERMISSION\u已授予){
ListPermissionsNeed.add(it)
Log.d(“缺少权限”,it)
}
}
如果(!ListPermissionsNeed.isEmpty()){
val array=arrayOfNulls(ListPermissionsNeed.size)
ListPermissionsNeed.toArray(数组)
ActivityCompat.requestPermissions(活动、数组、ConstantsStorage.activity\u请求权限\u代码)
返回错误
}
返回真值
}
伴星{
/**
*检索清单文件中列出的权限
*@param上下文
*@return返回权限的字符串数组
*/
乐趣检索权限(上下文:上下文):数组{
试一试{
返回上下文
.packageManager
.getPackageInfo(context.packageName、PackageManager.GET_权限)
.requestedPermissions
}捕获(e:PackageManager.NameNotFoundException){
抛出RuntimeException(“这应该从未发生过。”,e)
}
}
}
感谢您的帮助
checkSelfPermission()
仅适用于危险
权限。不要将它用于normal
权限。@Commonware Hm,你可能是对的,为什么它适用于其他权限,而其中一些权限也是正常的?我想没有办法检查权限是正常的还是危险的,所以我必须将此权限添加到我确实不喜欢的条件(it!=Manifest.permission.USE_BIOMETRIC)中。无论如何,谢谢checkSelfPermission()
仅用于危险的权限。不要将它用于normal
权限。@Commonware Hm,你可能是对的,为什么它适用于其他权限,而其中一些权限也是正常的?我想没有办法检查权限是正常的还是危险的,所以我必须将此权限添加到我确实不喜欢的条件(it!=Manifest.permission.USE_BIOMETRIC)中。无论如何谢谢你