为什么onRequestPermissionsResult给出两个数组而不是Map?

时间:2016-08-24 16:29:47

标签: java android

方法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();
    }
}

在我看来,后者更清晰,更强大。原因很难表现;任何给定的应用程序很少一次请求超过五或六个权限。这是什么原因?这似乎是一种奇怪而又不直观的设计选择。

0 个答案:

没有答案