19

Android M Preview 文档向我们展示了如何使用新的权限模型检查和请求权限。在下面的图表中,它向我们展示了一组权限组及其相关权限。

当我在第一次开始时尝试checkSelfPermission使用permission_group(ie Manifest.permission_group.CAMERA) 时,可以预见的是,我得到了PackageManager.PERMISSION_DENIED.

然后尝试requestPermissions相同permission_group,我没有弹出任何类型的对话框。'onRequestPermissionsResult' 立即返回-1

当我尝试使用相同的序列时Manifest.permission.Camera- 事情似乎正常工作。但是对于我正在制作的一个简单的应用程序,我需要录制带音频的视频,并请求两个单独的权限,CAMERA并且MICROPHONE(aka RECORD_AUDIO) 似乎是糟糕的设计。

问题:是否应该使用checkSelfPermission,但是有一个我应该提交的错误,因为它不会显示请求?还是这是故意的设计?requestPermissionManifest.permission.*Manifest.permission_group.*

*注意 - 我知道我可以自己创建一个requestPermissions(String[], int)具有多个权限的字符串数组,但是 id 仍然有很多if语句来检查我需要的权限组合并将它们作为一个组请求,而我需要请求一个permission_group

4

1 回答 1

24

当我尝试在第一次启动时使用permission_group(即Manifest.permission_group.CAMERA)检查SelfPermission 时,可以预见的是我得到了PackageManager.PERMISSION_DENIED。

那是因为checkSelfPermission()检查权限,而不是权限组。

然后尝试为同一个权限组请求权限,我没有弹出任何类型的对话框。'onRequestPermissionsResult' 立即返回 -1。

那是因为requestPermissions()使用权限,而不是权限组。

checkSelfPermission 和 requestPermission 是否应该与 Manifest.permission 一起使用。*

是的。

和 Manifest.permission_group.*

不。

还是这是故意的设计?

大概,是的。至少在 上checkSelfPermission(),它位于可追溯到 API 级别 1 的其他预先存在的方法之上,并且适用于权限,而不是权限组。

当我只需要请求一个权限组时

您正在对 Android 的未来做出可能不准确的假设。现在,pre-M,权限组并不是特别重要,权限才是最重要的。在 M 中,权限组的重要性不断攀升,因为这是M在向最终用户展示用户可以控制的内容时使用的内容。但是,之后的 Android 版本可能会在这方面提供更精细的粒度,无论是针对个人用户还是通过策略针对企业,这可能会回到权限。

API 表明谷歌正在为这些举措敞开大门。实际上,权限组的东西是用户体验决策,而不是技术决策。

于 2015-06-08T23:34:11.603 回答