一次性授予多个权限在安卓设备上无法正常工作

4

我试图同时获取两个权限,但是我无法做到。

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个回答

2

在 Kotlin 中使用以下代码实现多个权限:

 ActivityCompat.requestPermissions(context as Activity,
                                arrayOf(Manifest.permission.CAMERA, Manifest.permission.WRITE_EXTERNAL_STORAGE),
                                PERMISSION_CAMER)

1
Array<String>(2) { 
    Manifest.permission.READ_CONTACTS ; 
    Manifest.permission.WRITE_EXTERNAL_STORAGE
}

这个初始化程序总是返回WRITE_EXTERNAL_STORAGE,第一行没有任何作用。你应该使用arrayOf函数来构建数组。

1
Array(size: Int, init: (Int) -> T)

这是Array类的构造函数,它接受应该包含的元素数量和一个将索引映射到实际数组元素的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函数,因为您不想生成数组元素,而是要明确指定它们。


我已经使用了数组,但它仍然只要求最后一个权限,你能告诉我为什么吗? - Parag Pawar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接