多个权限一次不在android中工作

时间:2017-12-04 17:24:43

标签: android kotlin

我想一次获得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

3 个答案:

答案 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函数,因为您不希望生成数组元素,而是明确指定它们。