让用户在安卓系统中选择授予权限

3
我们有一个AutoCompleteTextView,它可以方便地从用户联系人数据中读取信息。然而,一些用户抱怨应用程序在安装时强制执行“READ_CONTACT”权限。是否有办法让用户选择授予这个权限并使用此功能,或者拒绝授权并失去此功能?如果在运行时不可能,也许有其他的方式?构建两个应用程序,一个带有该权限,另一个没有,不是一个选项!
2个回答

3
有没有一种方式让用户选择授予权限并使用此功能,或者拒绝它且失去该功能?
很不幸,没有。
如果在运行时不可能,也许还有其他方法吗?构建两个应用程序,一个具有该权限,另一个没有,不是一个选项!
您可以构建一个主应用程序而不需要该权限,然后创建一个插件来持有该权限并与主应用程序进行安全交互。这是一种比较高级的技术。我在我的书中进行了介绍,并且这里是带有示例项目的目录,演示了主机和插件。在我的情况下,我使用的是CallLog而不是ContactsContract,尽管权限(READ_CONTACTS)相同。

@user370305:插件请求特定权限(例如READ_CONTACTS),这些权限是预定义的。无法在运行时请求权限--这会导致Vista综合症(“CPU想要执行指令:允许?拒绝?”)。但是,主应用程序不必请求插件请求的权限,这解决了OP用户的担忧。 - CommonsWare
噢,我在你的项目中找到了它。谢谢。为示例项目加1。 - user370305

0

我不太确定这个,但你可以构建一个需要此权限的单独应用程序。这个额外的应用程序提供内容提供者。现在,您的主要应用程序检查您的扩展应用程序是否已安装,并从内容提供者获取数据。


那么,答案是否定的。除此之外,我的建议不需要怀疑的用户下载单独的应用程序。您还可以将扩展应用程序托管在单独的服务器上,并提示用户自动安装它(如果他想要)。用户所需做的就是在安装屏幕上按“确定”。 - Kirill Rakhman
非常奇怪!引用:“我的建议不需要怀疑的用户下载单独的应用程序”与“您还可以将扩展应用程序托管在单独的服务器上”。如果不下载,用户应该如何获取此应用程序? - Rafael T
他只是想帮助@rafael。值得一提的是,他建议从不同的服务器下载扩展应用程序并不差 - 这可能是一个不错的“应用内”后台进程,即无需从市场下载2个应用程序。 - barry
需要用户启用未知来源的功能。 - Chris Stratton

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接