使用Androids新的权限系统,我想知道如何正确实现它。关于如何以及何时使用权限的教程似乎非常清楚。但是,我不知道是谁请求权限以及请求权限。
所以,基本上我的问题是:启动另一个Activity的Activity是否应事先请求权限,或者需要权限的Activity是否应该发出请求?
如果需要相应权限的活动应该请求,我应该在requestForPermission
或onCreate
内拨打onStart
吗?
虽然这似乎是非常简单的问题,但我还没有在文档中找到任何提示。
感谢。
答案 0 :(得分:3)
如果您的应用在没有特定权限的情况下无法正常运行,那么拥有欢迎权限流可能会很好,您可以在其中解释为什么需要权限并请求授权。例如:Google地图和位置许可
如果应用的某些特定部分需要单独的权限,您可以在执行需要权限的方法调用之前调用权限检查。在这种情况下,您可以为需要联系人权限的函数创建一个包装器,并始终调用该包装器而不是实际方法。例如:当您尝试使用带语音功能的搜索时,Google地图和麦克风权限
同时结帐https://github.com/permissions-dispatcher/PermissionsDispatcher可能会减少许多权限代码。
答案 1 :(得分:3)
启动另一个Activity的Activity是否应事先请求权限,或者需要该权限的Activity是否应该发出请求?
这取决于你。主要指导是,用户应对您的权限请求应该有明确的联系:
如果您的应用需要某些权限才能执行任何有意义的操作,请在应用启动时询问它们,也许是在任何类型的“欢迎”演示之后,告知他们您需要权限的原因。
< / LI>如果您的应用需要某些权限才能根据用户执行某些应用内操作执行某些操作,例如点击操作栏项或{{1}}行,请在用户执行该操作时请求权限动作。
在应用程序中半随机点询问权限只会导致用户混淆(“我做了什么?为什么要问我这个?为什么这些问题出现在Stack Overflow答案中?!?”)
答案 2 :(得分:0)
当你的X任务因某些“Y”权限而被攻击时,只需要获得许可。在onCreate或onStart方法中没有要求。
如果您在活动开始时要求“Y”权限,那么Android M和以下型号之间没有区别。利用Android M.的美丽,例如,如果您需要存储权限来创建临时文件,最好在App内部区域中创建临时文件,即/ data / data /您的包名/ files /,而不是向用户请求存储权限。总的来说,我的观点是在你成为要求“Y”许可的必要条件之前尽可能多地利用这些选项。
关于活动问题,您的任务必须在某个片段或活动上运行,让该活动处理onRequestPermission结果。