有没有办法以编程方式请求许可?

2022-09-01 22:58:09

有没有办法在Android中以编程方式请求许可?我不想向AndroidManifest添加所有权限.xml。那么,是否有任何对话框在运行时请求权限?


答案 1

应用程序静态声明它们所需的权限,Android 系统会在安装应用程序时提示用户同意。Android 没有动态授予权限的机制(在运行时),因为它会使用户体验复杂化,从而损害安全性。


答案 2

直到现在,但是是的

根据谷歌在Android M中引入的新权限模型:

如果在 M 预览版上运行的应用支持新的权限模型,则用户在安装或升级应用时无需授予任何权限。相反,应用会根据需要请求权限,系统会向用户显示一个对话框,请求权限。

以下是此新模型的关键组件的摘要:

  • 声明权限:应用在清单中声明所需的所有权限,就像在早期的 Android 平台中一样。

  • 权限组:权限根据其功能划分为多个权限组。例如,权限组包含读取和写入用户的联系人和配置文件信息的权限。CONTACTS

  • 安装时授予的有限权限:当用户安装或更新应用时,系统会向应用授予清单中列出的属于 的所有权限。例如,闹钟和互联网权限属于 ,因此在安装时会自动授予它们。有关如何处理普通权限的详细信息,请参阅普通权限。系统还可以授予应用程序签名权限,如系统组件和签名权限中所述。系统不会提示用户在安装时授予任何权限。PROTECTION_NORMALPROTECTION_NORMAL
  • 用户在运行时授予权限:当应用请求权限时,系统会向用户显示一个对话框,然后调用应用的回调函数来通知用户是否授予了权限。此权限模型更改了应用对需要权限的功能的行为方式。下面总结了在适应此模型时应遵循的开发实践:

  • 始终检查权限:当应用需要执行任何需要权限的操作时,应首先检查它是否已经具有该权限。如果没有,它将请求被授予该权限。您无需检查属于 的权限。PROTECTION_NORMAL

  • 正常处理缺少权限:如果未向应用授予适当的权限,则应干净利落地处理故障。例如,如果添加的功能只需要权限,则应用可以禁用该功能。如果权限对于应用正常运行至关重要,则应用可能会禁用其所有功能,并通知用户他们需要授予该权限。

  • 权限是可撤销的:用户可以随时撤销应用的权限。如果用户关闭了应用的权限,则不会通知该应用。同样,你的应用应在执行任何受限操作之前验证它是否具有所需的权限。

资料来源:https://developer.android.com/preview/features/runtime-permissions.html


推荐