Android 6.0 权限 - 在哪里放置权限请求?

Android 6.0 Permissions - Where to place permission requests?

有了Android的新权限系统,我想知道如何正确实施它。关于如何以及何时使用权限的教程似乎非常清楚。但是,我不知道谁请求权限以及在哪里请求它们。

所以,基本上我的问题是:启动另一个 Activity 的 Activity 应该事先请求许可还是需要许可的 Activity 发出请求?

如果需要权限的Activity需要权限,我应该在onCreate中调用requestForPermission还是在onStart中调用?

虽然看起来很简单的问题,但我在文档中没有找到任何提示。

谢谢。

如果您的应用在没有特定权限的情况下无法正常运行,最好有一个受欢迎的权限流程,您可以在其中解释为什么需要权限并请求授予。例如:Google 地图和位置权限

如果应用的某些特定部分需要单独的权限,您可以在执行需要权限的方法调用之前调用权限检查。在这种情况下,您可以为需要联系人权限的函数创建一个包装器,并始终调用该包装器而不是实际方法。例如:Google 当您尝试使用带有语音功能的搜索时获得地图和麦克风权限

更多详情http://inthecheesefactory.com/blog/things-you-need-to-know-about-android-m-permission-developer-edition/en

另请查看https://github.com/permissions-dispatcher/PermissionsDispatcher 可以减少很多权限代码。

当你的 X 任务由于某些 "Y" 许可而被触发时,那么只请求许可。在 onCreate 或 onStart 方法中询问是没有意义的。

如果你在Activity开头请求"Y"许可,那么AndroidM和以下型号没有区别。利用 Android M 的优点。例如,如果您需要存储权限来创建临时文件,最好在 App 内部区域创建一个临时文件,即 /data/data/your package name/files/ 而不是请求存储对用户的许可。总的来说,我的观点是在成为请求 "Y" 许可的必要条件之前,尽可能多地利用这些选项。

关于 Activity 问题,您的任务必须 运行 完成某个片段或 activity 让 activity 处理 onRequestPermission 结果。

should the Activity, who starts another Activity request the permission beforehand or should the Activity which requires the permission place the request?

这取决于你。主要指导是用户所做的事情与您的权限请求之间应该有明确的联系:

  • 如果您的应用需要某些权限才能执行任何有意义的操作,请在您的应用启动时询问他们,也许在进行任何形式的 "welcome" 演示之后,告知他们您需要这些权限的原因.

  • 如果您的应用需要特定权限才能根据用户执行某些应用内操作执行某些操作,例如点击操作栏项目或 ListView 行,请在以下情况下请求权限用户执行该操作。

在应用中的半随机点请求权限只会导致用户混淆 ("what did I do? why is it asking me this? and why are these questions appearing in an Stack Overflow answer?!?")。