我想一次获得2个权限,但我无法这样做。
if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (ContextCompat.checkSelfPermission(context, Manifest.permission.READ_CONTACTS)
!= PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(context, Array<String>(2) {
Manifest.permission.READ_CONTACTS;
Manifest.permission.WRITE_EXTERNAL_STORAGE},
1);
}
}
它仅要求WRITE_EXTERNAL_STORAGE
权限,而不是READ_CONTACTS
。实际上,如果我先写WRITE_EXTERNAL_STORAGE
一个,然后READ_CONTACTS
,那么它只会要求联系,而不是WRITE_EXTERNAL_STORAGE
。
答案 0 :(得分:2)
在kotlin中使用此代码获得多项权限
ActivityCompat.requestPermissions(context as Activity,
arrayOf(Manifest.permission.CAMERA, Manifest.permission.WRITE_EXTERNAL_STORAGE),
PERMISSION_CAMER)
答案 1 :(得分:1)
u_ex150607
此初始化程序始终返回Array<String>(2) {
Manifest.permission.READ_CONTACTS ;
Manifest.permission.WRITE_EXTERNAL_STORAGE
}
,第一行不执行任何操作。您可能应该使用WRITE_EXTERNAL_STORAGE
函数来构造数组。
答案 2 :(得分:1)
Array(size: Int, init: (Int) -> T)
是Array
类的constructor,它接受应该包含的元素数量,以及init
函数,它将索引映射到实际的数组元素。
以下是您的代码所做的事情,以更详细的方式编写
val a = Array<String>(size = 2, init = { index: Int ->
Manifest.permission.READ_CONTACTS; // nothing
Manifest.permission.WRITE_EXTERNAL_STORAGE // returned by the lambda for each index
})
结果:
[Manifest.permission.WRITE_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE]
因此,在这种情况下,您最好使用arrayOf
函数,因为您不希望生成数组元素,而是明确指定它们。