一尘不染

Android 6.0多重权限

java

我知道Android 6.0具有新的权限,我知道可以使用类似这样的名称

if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE) !=
    PackageManager.PERMISSION_GRANTED) {
    ActivityCompat.requestPermissions(this,
        new String[] { 
            Manifest.permission.WRITE_EXTERNAL_STORAGE
        }, PERMISSION_WRITE_STORAGE);
}

今天,我看到了一个需要3个权限的Google应用:联系人,短信和摄像头。它正在制作第1-3页,并同时将它们一起调用以激活。

有人可以告诉我如何调用4个权限来同时激活短信,摄像头,联系人和存储吗?

示例(忘记了Google应用的名称:()
该应用需要短信,联系人和相机

该应用程序问我(并在第1-3页建立了对话框)激活短信,激活通讯录,然后激活相机。所以这个谷歌应用程序一起调用了所有3个必需的权限,我的问题是我怎么能达到相同的权限?


阅读 415

收藏
2020-02-28

共1个答案

一尘不染

只需在ActivityCompat.requestPermissions(...)通话中包含所有4个权限,Android就会像你提到的那样自动将它们分页。

我有一个帮助程序方法来检查多个权限,看看是否其中的任何一个都不被授予。

public static boolean hasPermissions(Context context, String... permissions) {
    if (context != null && permissions != null) {
        for (String permission : permissions) {
            if (ActivityCompat.checkSelfPermission(context, permission) != PackageManager.PERMISSION_GRANTED) {
                return false;
            }
        }
    }
    return true;
}

Or in Kotlin:

fun hasPermissions(context: Context, vararg permissions: String): Boolean = permissions.all {
    ActivityCompat.checkSelfPermission(context, it) == PackageManager.PERMISSION_GRANTED
}

然后,只需发送所有权限即可。Android只会询问需要的东西。

// The request code used in ActivityCompat.requestPermissions()
// and returned in the Activity's onRequestPermissionsResult()
int PERMISSION_ALL = 1; 
String[] PERMISSIONS = {
  android.Manifest.permission.READ_CONTACTS, 
  android.Manifest.permission.WRITE_CONTACTS, 
  android.Manifest.permission.WRITE_EXTERNAL_STORAGE, 
  android.Manifest.permission.READ_SMS, 
  android.Manifest.permission.CAMERA
};

if (!hasPermissions(this, PERMISSIONS)) {
    ActivityCompat.requestPermissions(this, PERMISSIONS, PERMISSION_ALL);
}
2020-02-28