一次多个权限不工作在Android

我正在尝试一次获得2个权限,但IAM无法这样做。

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(2) { Manifest.permission.READ_CONTACTS; Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1); } } 

它只要求WRITE_EXTERNAL_STORAGE权限而不是READ_CONTACTS 。 实际上,如果我先写入WRITE_EXTERNAL_STORAGE ,然后再写入READ_CONTACTS ,那么它只会请求联系而不是WRITE_EXTERNAL_STORAGE

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

Array类的构造函数 ,它接受它应该包含的元素数量,以及一个将索引映射到实际数组元素的init函数。

这是你的代码所做的,以更详细的方式编写

 val a = Array(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函数,因为您不想生成数组元素,而是直接指定它们。

 Array(2) { Manifest.permission.READ_CONTACTS ; Manifest.permission.WRITE_EXTERNAL_STORAGE } 

这个初始化器总是返回WRITE_EXTERNAL_STORAGE ,第一行不做任何事情。 你应该使用arrayOf函数来构造数组。

使用此代码在kotlin中获得多个权限

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