可选权限,以便应用程序可以在所有设备上显示并在某些设备上启用可选功能?

Posted

技术标签:

【中文标题】可选权限,以便应用程序可以在所有设备上显示并在某些设备上启用可选功能?【英文标题】:Optional permissions so an app can show on all devices and enable optional features on some? 【发布时间】:2012-03-07 04:26:12 【问题描述】:

android 中的许多功能都需要在清单中设置使用权限。然后这些值决定了哪些设备将在市场中看到它们。但是,如果该功能是可选的,应该怎么做……如果它可以在许多设备上运行,但只需要在少数设备上获得许可?

举个例子:假设一个具有多种功能和大量内容的应用程序 - 它提供了一个用于致电公司的按钮。这是一个非常方便的功能,而不是写下号码或将其复制并粘贴到手机应用程序中。但是,这不是必需的。

如果使用该功能并将电话权限添加到应用程序中,那么这对手机来说一切都很好,但没有平板电脑会在市场中看到该应用程序。

这个问题的一般解决方案是什么?

可以使用不同的权限制作多个应用程序,但这种方法存在很多问题(额外的开发时间、难以保持一致的维护、评论和评分在不同的应用程序之间存在差异,以及是否存在多种不同类型的可选权限而不是每个组合可能需要不同的应用程序)。

应用程序可以通过编程检查该功能是否可用,并根据设备启用或禁用它。这样做的问题是,如果应用程序没有权限,那么如果它尝试使用该功能就会崩溃——如果它确实有权限,一些设备将无法在市场。

在某些情况下,可以从应用程序中完全删除非必要功能以避免该问题。这也不是一个很好的解决方案,因为这些功能在支持它的设备上“很高兴”。

是的,我知道Is it possible to have "optional" permissions in Android? 是一个类似的问题。我希望获得更新的信息和人们发现的其他解决方法,如果有的话......这个问题的解决方案是什么?除了我上面列出的方法之外,还有其他方法吗?

【问题讨论】:

【参考方案1】:

这个问题的一般解决方案是什么?

对于该特定问题,将<uses-feature android:name="android.hardware.telephony" android:required="false"/> 添加到您的清单中,以表明this feature is optional。然后,您可以使用PackageManagerhasSystemFeature() 来确定设备在运行时是否具有非必需功能。

【讨论】:

因此不能将 uses-permission 设为可选,但在许多情况下可以添加 uses-feature,将其设为可选,这是 Market 用于过滤的主要信息来源。优秀!阅读您提供的链接后,这一切都变得更有意义了,谢谢。 @ChadSchultz:您的分析很准确。我只是希望我链接到的材料比它当前的位置更突出一点...... :-( 对于希望了解某项功能是否可用的人,请关注该主题:***.com/a/5264328/693752

以上是关于可选权限,以便应用程序可以在所有设备上显示并在某些设备上启用可选功能?的主要内容,如果未能解决你的问题,请参考以下文章

Facebook IOS SDK 可选权限

android - 谷歌地图未在某些设备上显示

如何使用 adb grant 或 adb revoke?

检测 Android 设备上缺少听筒(仅限扬声器)

推送通知有效负载未保存在某些设备上

来自 FragmentActivity 的片段在某些设备上不显示背景图像