permissionsdispatcher和多个@NeedsPermission与kotlin

时间:2016-07-06 20:37:37

标签: android kotlin android-permissions

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

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

我在kotlin上遇到问题 - 它不接受多个参数 - 适用于java

2 个答案:

答案 0 :(得分:4)

在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的示例基本上是在做,然后撤消数组,这是没有必要的。

答案 1 :(得分:0)

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

在java @NeedsPermission({...})中,大括号{...}只是创建数组的简写。在kotlin中,你必须明确地说它是一个数组,因为{}是为lambda表达式保留的。