Android M Preview docs告诉我们如何使用新的权限模型检查和请求权限。在下面的图表中,它向我们显示了一组权限组及其相关的权限。
当我第一次尝试使用checkSelfPermission
(即permission_group
)Manifest.permission_group.CAMERA
时,可以预见我得到PackageManager.PERMISSION_DENIED
。
然后尝试requestPermissions
同样的permission_group
并且我不会弹出任何类型的对话框。 ' onRequestPermissionsResult'立即返回-1
。
当我使用Manifest.permission.Camera
尝试相同的序列时 - 事情似乎正常。但对于我正在制作的简单应用,我需要录制带有音频的视频,并请求两个单独的权限,CAMERA
和MICROPHONE
(又名RECORD_AUDIO
)似乎很差设计。
问题:checkSelfPermission
和requestPermission
是否应该与Manifest.permission.*
和Manifest.permission_group.*
一起使用,但是我应该有一个错误文件,因为它不会显示请求?或者这是故意的设计?
*注意 - 我知道我可以自己创建一个具有多个权限的requestPermissions(String[], int)
字符串数组,但是id仍然有很多if
语句来检查我需要和请求的权限组合他们作为一个群体,当我 只需要permission_group
答案 0 :(得分:24)
当我尝试在第一次启动时使用permission_group(即Manifest.permission_group.CAMERA)检查SelfPermission时,可以预见我得到了PackageManager.PERMISSION_DENIED。
这是因为checkSelfPermission()
检查权限,而不是权限组。
然后尝试为同一个permission_group请求权限,我没有弹出任何类型的对话框。 'onRequestPermissionsResult'立即返回-1。
这是因为requestPermissions()
使用权限,而不是权限组。
checkSelfPermission和requestPermission是否适用于Manifest.permission。*
是
和Manifest.permission_group。*
没有
或者这是故意的设计?
据推测,是的。至少在checkSelfPermission()
上,它会覆盖其他预先存在的方法,这些方法可以追溯到API级别1并处理权限,而不是权限组。
当我只需要请求permission_group
时
您正在假设Android的未来可能不准确。现在,前M,权限组并不是特别重要,权限是重要的。在M中,权限组的重要性越来越高,因为这是 M 在向最终用户呈现用户可以控制的内容时使用的内容。但是,之后的Android版本可能会为此提供更精细的粒度,无论是个人用户还是企业通过策略,这可能会回到权限。
API表明谷歌正在为这些行动敞开大门。实际上,权限组的内容是UX的决定,而不是技术决定。