Android 6.0 多权限

 

问题描述:

我知道 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 个权限:联系人、短信和相机。它正在制作第 1-3 页并同时将它们全部调用以激活。

谁能告诉我如何调用 4 个权限同时激活,如短信、相机、联系人和存储?

示例(忘记了谷歌应用程序的名称:()
该应用程序需要短信、联系人和相机

该应用程序问我(并制作了一个对话框 page1-3)激活短信,激活联系人,然后是相机。所以这个谷歌应用程序将所有 3
个必需的权限一起调用,我的问题是我怎样才能获得相同的权限?


 

第 1 个答案:

只需在通话中包含所有 4 个权限,ActivityCompat.requestPermissions(...)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;
}

或者在 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);
}

我没有得到优化的正则表达式,它根据第一个空格出现将我拆分为字符串:var str="72 tocirah sneab";我需要得到:[ "72", "tocirah sneab",]