Android 许可Dispatcher和kotlin的多个@NeedsPermission

Android 许可Dispatcher和kotlin的多个@NeedsPermission,android,kotlin,android-permissions,Android,Kotlin,Android Permissions,对于一个权限,我可以在java和kotlin中使用permissionsdispatcher,但对于这样的多个权限: @NeedsPermission({Manifest.permission.BLUETOOTH_ADMIN,Manifest.permission.BLUETOOTH}) 我在kotlin上遇到了一个问题—它不接受多个参数—在java中可以正常工作 @NeedsPermission(arrayOf(Manifest.permission.BLUETOOTH_ADMIN,Mani

对于一个权限,我可以在java和kotlin中使用permissionsdispatcher,但对于这样的多个权限:

@NeedsPermission({Manifest.permission.BLUETOOTH_ADMIN,Manifest.permission.BLUETOOTH})
我在kotlin上遇到了一个问题—它不接受多个参数—在java中可以正常工作

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

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

在Java中{}表示创建一个数组,在kotlin的上下文中,{}意外地创建了一个数组,并且无法确定您的意图,因为lambda中的代码无效

因此,您说的是@NeedsPermissionsomeFunctionReferenceThatIsInvalid,而不是将权限数组作为@NeedsPermissionarray传递

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

@NeedsPermission(Manifest.permission.BLUETOOTH_ADMIN, Manifest.permission.BLUETOOTH)
如果将其视为数组,则应使用arrayOf函数:

@NeedsPermission(arrayOf(Manifest.permission.BLUETOOTH_ADMIN, Manifest.permission.BLUETOOTH))
创建数组然后使用的示例基本上都是先执行数组,然后撤消数组,这是不必要的

在Java中,{}表示创建一个数组,在Kotlin的上下文中,{}意外地创建了一个数组,并且无法确定您的意图,因为lambda中的代码无效

因此,您说的是@NeedsPermissionsomeFunctionReferenceThatIsInvalid,而不是将权限数组作为@NeedsPermissionarray传递

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

@NeedsPermission(Manifest.permission.BLUETOOTH_ADMIN, Manifest.permission.BLUETOOTH)
如果将其视为数组,则应使用arrayOf函数:

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

创建数组然后使用的示例基本上都是先执行数组,然后撤消数组,这是不必要的

你能详细说明一下吗?你到底试过什么Kotlin代码,错误是什么?你对这个例子的语法有疑问吗@NeedsPermissionManifest.permission.BLUETOOTH\u管理员,Manifest.permission.BLUETOOTH似乎正在工作。Java的字符串[]值;在Kotlin中被识别为vararg参数。@Androidx该Kotlin的哪个版本适用于您?我运行1.0.3,但该语法失败here@ligi 1.0.3. 奇怪的是,接受的答案不适用于我,类型推断失败。预期类型不匹配:推断类型为kotlin.Array,但应为kotlin.String,我必须在arrayOf之前添加*以将其扩展到vararg中。你是对的-我编辑了答案请详细说明-你到底尝试了什么kotlin代码,错误是什么?你对这种情况下的语法有疑问吗@NeedsPermissionManifest.permission.BLUETOOTH\u管理员,Manifest.permission.BLUETOOTH似乎正在工作。Java的字符串[]值;在Kotlin中被识别为vararg参数。@Androidx该Kotlin的哪个版本适用于您?我运行1.0.3,但该语法失败here@ligi 1.0.3. 奇怪的是,接受的答案不适用于我,类型推断失败。预期类型不匹配:推断类型为kotlin.Array,但应为kotlin.String,我必须在arrayOf之前添加*以将其扩展到vararg中。您是对的-我编辑了答案*正在撤消您的数组,因此将两者都删除,如果是vararg,只需列出元素,而无需任何特殊的数组创建或使用扩展运算符。这已被其他人修改,我的原始答案中没有*the*正在撤消数组,因此请同时删除这两个元素,如果是vararg,只需列出元素,而无需任何特殊的数组创建或使用扩展运算符。这已经被其他人修改过,我的原始答案没有*