permissionsdispatcher 和 multiple @NeedsPermission's with kotlin

permissionsdispatcher and multiple @NeedsPermission's with kotlin

对于一个权限,我可以在 java 和 kotlin 中使用 permissionsdispatcher - 但是当涉及到多个权限时,如下所示:

@NeedsPermission({Manifest.permission.BLUETOOTH_ADMIN,Manifest.permission.BLUETOOTH})

我在 kotlin 上遇到问题 - 它接受的参数不超过一个 - 使用 java

可以正常工作
@NeedsPermission(arrayOf(Manifest.permission.BLUETOOTH_ADMIN,Manifest.permission.BLUETOOTH))

在java @NeedsPermission({...}) 中,大括号{...} 只是一个shorthand 用于创建数组。在 kotlin 中,您必须明确声明它是一个数组,因为 {} 是为 lambda 表达式保留的。

在 Java 中,{} 表示创建一个数组,而在 Kotlin 的这种情况下,{} 意外地创建了一个 lambda expression 并且无法确定您因为 lambda 中的代码无效。

所以你说的是 @NeedsPermission(someFunctionReferenceThatIsInvalid) 而不是像 @NeedsPermission(array)

那样传入一组权限

在注释中,数组被视为 vararg 因此您可以只列出元素:

@NeedsPermission(Manifest.permission.BLUETOOTH_ADMIN, Manifest.permission.BLUETOOTH)

如果将其视为数组,您将使用 arrayOf 函数:

@NeedsPermission(arrayOf(Manifest.permission.BLUETOOTH_ADMIN, Manifest.permission.BLUETOOTH))

创建数组然后使用 * spread operator 的示例基本上是执行然后撤消数组,没有必要。