有没有办法以编程方式提出许可?

时间:2011-09-22 15:15:31

标签: java android permissions

有没有办法在android中以编程方式请求权限?我不想为AndroidManifest.xml添加所有权限。那么有没有在运行时请求权限的对话框?

6 个答案:

答案 0 :(得分:14)

  

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

答案 1 :(得分:8)

没有。安装应用程序时,需要通知用户有关权限的信息。在运行时询问用户将存在安全风险。

答案 2 :(得分:8)

直到现在,但

根据Google在 Android M 中引入的新权限模式:

  

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

以下是这个新模型的主要组成部分的摘要:

  • 声明权限: 该应用程序在清单中声明它需要的所有权限,如 早期的Android平台。

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

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

  • 始终检查权限:当应用需要执行任何需要权限的操作时,应首先检查它是否已具有该权限。如果没有,则要求获得该许可。您无需检查属于PROTECTION_NORMAL

  • 的权限
  • 优雅地处理缺少权限:如果应用程序未获得适当的许可,则应该干净地处理故障。例如,如果添加的功能仅需要权限,则应用可以禁用该功能。如果权限对于应用程序运行至关重要,则应用程序可能会禁用其所有功能,并通知用户他们需要授予该权限。

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

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

答案 3 :(得分:7)

没有

在这里回答:get Android permission dynamiclly

请参阅此处的“使用权限”部分: http://developer.android.com/guide/topics/security/security.html

答案 4 :(得分:2)

Android M引入了Runtime权限,每个人都在等待。此外,权限现在分为NORMAL和DANGEROUS,其中默认授予NORMAL权限,并在需要时请求DANGEROUS权限。此外,用户可以随时从设备的“设置”菜单中撤消危险权限。

答案 5 :(得分:1)

如果我将“Piskvor”和“Hanno Binder”的答案结合起来,您的应用程序可以检查帮助应用程序是否可用(尝试使用Intent调用它),如果它不存在(调用失败) ,提示用户安装它。

例如,请查看以下内容。

how to download adobe reader programatically if not exists