【问题标题】:Uses-Permission vs Uses-Feature使用权限与使用功能
【发布时间】:2015-01-22 00:33:24
【问题描述】:

我见过很多人询问和解释两者之间区别的具体案例,但我不能也似乎不理解一般的区别。两者是同义词吗?一种暗示另一种吗?

【问题讨论】:

标签: java android


【解决方案1】:

这两个是同义词吗?

没有。 <uses-permission> 说“嘿,Android(和相关的分销渠道),请让用户允许我做 X”。 <uses-feature> 说“嘿,Android(和相关的分销渠道),我有兴趣在具有 Y 功能的硬件上运行”。

<uses-feature> 可能会在硬件不符合您的要求但用户不参与的情况下将您从 Play 商店(和其他渠道)中过滤掉。

一种暗示另一种吗?

有时。 If you request certain permissions, like CAMERA, Android assumes by default that you need the corresponding hardware。如果需要,您可以使用 <uses-feature>android:required="false" 覆盖该默认行为。

【讨论】:

  • @CommonsWare 我可以将 与“com.android.vending.billing”一起使用吗?
  • @OmarAbdan:没有列出in the documentation,所以我认为答案是“否”。
  • @CommonsWare 那么,如果该功能在那里列出,uses_feature 是否足够?喜欢相机?
  • @MuhammedRefaat:对不起,我不明白你的问题。
  • @MuhammedRefaat:就我个人而言,我建议始终包含<uses-permission> 元素,因为它可以让维护应用程序的人员清楚地看到您正在请求权限。但是,在 <uses-feature android:name="android.hardware.camera"/> 的特定情况下,AFAIK 您可以跳过 <uses-permission> 元素,Android 会假定您无论如何都想要求它。
【解决方案2】:

建议使用<uses-feature><uses-permission>。您的应用程序的每个功能都需要 <uses-feature> 和属性 android:required="false" 如果您的应用程序可以在没有它的情况下运行。这样做的原因是 Google Play 会过滤掉具有以编程方式实现但不受硬件支持的功能的应用程序,因此您看不到它们。

例如,除了其他几个权限之外,您的应用还拥有<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> 权限。如果有设备没有 GPS 功能,则该设备将不会在 Google Play 中看到此应用。如果您的应用在没有 GPS 连接的情况下完全正常运行,那么解决方案是添加:

<uses-feature android:name="android.hardware.location" android:required="false"/> 
<uses-feature android:name="android.hardware.location.gps" android:required="false"/>
<uses-feature android:name="android.hardware.location.network" android:required="false"/>

因此,正如@CommonsWare 已经提到的,&lt;uses-feature&gt; 会覆盖&lt;uses-permission&gt; 的默认行为

【讨论】:

  • 谢谢,这在排查亚马逊平板电脑与我的应用程序不兼容的原因时帮助很大!
猜你喜欢
  • 2023-03-16
  • 2016-10-19
  • 2022-10-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-26
  • 2017-06-05
  • 1970-01-01
相关资源
最近更新 更多