<uses-feature
android:name="string"
android:required=["true" |"false"]
android:glEsVersion="integer" />
<manifest>
定义应用使用的单个硬件或软件功能。
声明<uses-feature>的目的是通知其它外部实体,你的应用依赖的硬件和软件功能。这个元素提供的required属性会让你指定应用程序在所需的功能不存在时,应用程序是否能够正常运行。由于对于某个功能的支持可能随着Android设备发生变化,所以<uses-feature>元素在让应用描述它使用设备上哪些功能时扮演了重要的角色。
应用程序所声明的一组可用功能对应着一组由Android的PackageManager类构造的可用功能的常量,为了方便起见,在这个文档底部的Features Reference中已经将它们列出。
你必须在单独的<uses-feature>元素中制定每个功能,所以如果你的应用需要多个功能,应当定义多个<uses-feature>元素。例如,需要设备中的蓝牙和摄像头功能的应用应当定义这两个元素:
<uses-featureandroid:name="android.hardware.bluetooth" />
<uses-featureandroid:name="android.hardware.camera" />
通常,你应当始终确保为你的应用需要的所有功能定义<uses-feature>元素。
定义的<uses-feature>元素只是一条信息,也就是说在安装应用之前,Android系统本身不会检查设备是否支持匹配的功能。但是,其它服务(例如Google Play)或应用可能要检查你应用的<uses-feature>定义,并将其作为处理或同你应用交互的一部分。因此,在你的应用中定义所有功能(见下表)是非常重要的。
对于其中某些功能,存在一种特定得属性,这个属性允许你定义这个功能的版本,例如使用的Open GL的版本(用glEsVersion定义)。在设备上的其它功能,无论存在与否,例如摄像头,都使用name属性来定义。
虽然<uses-feature>元素只在API Level 4或更高版本上可用,但是推荐的作法是在所有应用中包含这些元素,即使在minSdkVersion为"3"或更低的版本中。运行在老平台上的设备会忽略这个元素。
注意:当定义功能时,需要记住的是你也必须请求相应的权限。例如,在你的应用能访问摄像头API之前,你还必须请求CAMERA权限。请求权限不仅会确保你的应用能访问相应的硬件和软件,而且在你的应用使用这些定义的功能还能恰当的解决设备的兼容性。
android:name
以标识符串的形式来指定应用使用的单个硬件或软件功能。可用的标识符在 下方的Hardwarefeatures和Software features表中已经列出。标识符是区分大小写的。
android:required
布尔值,表示应用是否需要android:name指定的功能。
当你为功能定义了android:required="true",并且这个功能不在设备上时,应用不能正常运行。
当你为功能定义了android:required="false"时,意味着如果功能存在于设备上时应用可以使用这个功能,但如果需要,也可以将应用设计成在没有该功能的设备上也能正常运行。
如果没有定义android:required的默认值是"true"。
android:glEsVersion
应用需要的OpenGLES的版本。高16位表示主版本号,低16位代表子版本号。例如,如果指定了OpenGL ES的版本为2.0,那么你应当将其值设为“0x00020000”,或指定了OpenGL ES 3.0,那么你应当将其值设为“0x00030000”。
应用最多能在manifest中指定一个android:glEsVersion属性。如果指定了一个以上,那么android:glEsVersion最大的那个值会被使用,其它值会被忽略。
如果应用没有指定android:glEsVersion属性,那么它会默认这个应用只请求OpenGL ES 1.0,所有Android设备都支持这个版本。
应用能假定如果平台支持特定的OpenGL ES版本,它也支持所有更低的OpenGL ES版本。因此,对于既需要OpenGL ES 1.0,又需要OpenGL ES 2.0版本的应用,必须要指定它需要OpenGL ES 2.0。
能够用任何版本的OpenGLES来工作的应用,应当只指定它需要的OpenGL ES的最低版本。(在运行时能检查更高版本的OpenGL ES是否可用)。
API Level 4