Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/210.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android-未授权使用生物特征_Android_Kotlin_Permissions_Manifest - Fatal编程技术网

Android-未授权使用生物特征

Android-未授权使用生物特征,android,kotlin,permissions,manifest,Android,Kotlin,Permissions,Manifest,我正在用下面的代码检查清单中的所有许可。现在我添加了使用生物识别权限,因为我想使用指纹,但这个权限没有被授予,我不知道为什么 我知道使用_生物特征识别是正常的许可,所以不应该要求它,当它出现在清单中时应该授予它,但事实并非如此 正在检查其他权限,并且所有权限都已授予或请求,只有此权限无效 我正在两部手机上测试应用程序,模拟了Android 8.0和API 26的谷歌像素,以及Android 8.1和API 27的物理小米红米5 两款手机都使用指纹解锁屏幕 清单中的许可: <uses-per

我正在用下面的代码检查清单中的所有许可。现在我添加了使用生物识别权限,因为我想使用指纹,但这个权限没有被授予,我不知道为什么

我知道使用_生物特征识别是正常的许可,所以不应该要求它,当它出现在清单中时应该授予它,但事实并非如此

正在检查其他权限,并且所有权限都已授予或请求,只有此权限无效

我正在两部手机上测试应用程序,模拟了Android 8.0和API 26的谷歌像素,以及Android 8.1和API 27的物理小米红米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)
        }

    }
}
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)中。无论如何谢谢你