13

我知道 Nexus 7 上的相机可用性,所以我更改了清单,使权限不需要如下:

<uses-permission android:name="android.permission.CAMERA" android:required="false"/>

该应用程序仍然不可用。在这一点上,我对谈论uses-feature而不是的文档感到困惑user-permission

请注意您声明(或暗示)需要哪些系统功能来运行您的应用程序,否则 Play 商店不会让您的应用程序对 Nexus 7 用户可用。始终将对您的应用程序不重要的硬件功能声明为 required="false",然后在运行时检测该功能是否存在并逐步增强功能

这是怎么回事?我对功能和权限之间的区别感到困惑。

4

1 回答 1

22

uses-feature声明您的应用使用的硬件/软件可用性类型。您可以使用它来自动缩小它出现的设备类型。您可以将这些功能中的任何一个声明为可选,如果应用程序在没有它们的情况下仍然能够运行,并且旨在处理该功能不可用的情况(例如您提到的 Nexus 7)。

uses-permission声明允许您的应用使用哪些类型的函数。如果您声明了权限,就像您所做的那样,它会让用户知道“嘿,这个应用程序可以使用我的相机”,他们可以决定是否批准该使用。您不能将权限标记为可选。

相反,您应该离开标签的required属性uses-permission,并使用 为相机添加另一个标签uses-feature,并在该标签中将其标记为required="false"。例如:

<uses-permission android:name="android.permission.CAMERA"/>
<uses-feature android:name="android.hardware.camera" android:required="false"/>

编辑:阅读本文档,您可能还需要添加:

<uses-feature android:name="android.hardware.camera.autofocus" android:required="false"/>

因为相机权限意味着这两个功能的要求。如果没有这个额外的标签,它可能会工作,但为了以防万一,过于具体可能不会有什么坏处。

于 2012-09-05T22:04:38.337 回答