方法ActivityCompat#onRequestPermissionsResult在其回调中提供了两个数组:
权限|字符串:请求的权限。永远不会为空。
grantResults | int:相应权限的授予结果,即PERMISSION_GRANTED或PERMISSION_DENIED。永远不会为空。
根据我的理解,要查看是否授予了特定权限并根据此次评估的结果采取行动,您需要这样做:
for(int i = 0; i < permissions.length; ++i) {
if(Manifest.permission.SEND_SMS.equals(permissions[i]) && grantResults[i] == PackageManager.PERMISSION_GRANTED) {
sendSMS();
}
}
为什么这种方法不能简单地给出Map<String, Integer>
?然后操作将是:
for(Map.Entry<String, Integer> permission : permissions.entrySet()) {
if(Manifest.permission.SEND_SMS.equals(permission.getKey()) && permission.getValue() == PackageManager.PERMISSION_GRANTED) {
sendSMS();
}
}
在我看来,后者更清晰,更强大。原因很难表现;任何给定的应用程序很少一次请求超过五或六个权限。这是什么原因?这似乎是一种奇怪而又不直观的设计选择。