如果你是一个Android用户,而且你有一个老旧的安装有android 1.5 的android设备,你可能会注意到一些高版本的应用没有在手机上的Android Market 中显示。这必定是应用使用了<uses-feature>的结果。
Android Market会根据uses-feature过滤所有你设备不支持的应用。通过使用<uses-feature>元素,一个应用可以指定它所支持的硬件型号,举个例子,有些设备不支持多点触控或者OpenGL ES 2.0,那么过滤器就会过滤需要这些硬件支持(多点触控或者OpenGL ES 2.0)的应用,用户就不会在android market上看到这些应用。
一个<uses-feature>元素包含以下属性:
<uses-feature android:name="string" android:required=["true" | "false"] android:glEsVersion="integer" />
name属性指定了应用的特征,required属性告诉过滤器我们是否在任何情况下必须要需要这个设备的支持,或者仅仅只是“nice to have”。
最后一个属性是可选择的,只是用在需要指定一个OpenGL ES版本的时候。
接下来的几个硬件特征对于游戏开发是非常有用的。
android.hardware.touchscreen.multitouch:它要求设备有一个多点触控的屏幕以支持基本的多点触控交互,就如收缩(放大)图像比例。这些类型的屏幕跟踪多个手指的能力都有所不同,所以你必须确保这个屏幕的性能是能够支持的游戏进行。
android.hardware.touchscreen.multitouch.distinct: 这是一个多点触控的兄弟属性,它要求提设备供完整的多点触控功能。
我们将会在接下来的章节片段中看到多点触控。现在只要记住在当你的游戏需要一个支持多点触控的屏幕的时候,我们可以使用 <uses-feature>元素来剔除所有不支持多点触控的设备,就像下面这样:
<uses-feature android:name="android.hardware.touchscreen.multitouch" android:required="true"/>
另外一个在游戏开发中非常有用的是去指定需要的OpenGL ES版本。在本书中,我们只关心OpenGL ES1.0和OpenGL ES1.1就可以了。由于这2者基本上没有什么不同,所以我们也不用去指定<uses-feature>了。然而,有些设备支持更强大的OpenGL ES2.0
如果你的游戏需要更强大的图形处理能力,我们可以指定OpenGL ES 2.0,然后我们的游戏只会被支持OpenGL ES 2.0的设备所看见。注意,在本书中不会使用OPenGL ES 2.0, 我们只是过滤那些不能提供足够图形处理能力的设备。下面显示了我们怎么去实现它。
<uses-feature android:glEsVersion="0x00020000" required="true"/>
它将使我们的游戏只被支持OPenGL ES 2.0 和 假装有相当的图形处理能力的设备所看到。
NOTE: 有些设备所反映的性能特征是不正确的,所以开发你的应用的时候尽量去支持各种不同的设备。要谨慎使用<uses-feature>。
现在就以硬件而言,你的应用已经直接地减少了许多安装量,这将直接影响到你应用的销量。所以当你定义<uses-feature>之前请慎重考虑。举个例子,如果你的游戏需要有多点触控的支持,但是我们也可以思考另外一种方法,是游戏能够在支持单点触控的设备上运行良好,我们就可以写2个路径的代码,分别在两种设备上运行。
AndroidManifest.xml中的<uses-feature>以及和<uses-permission>之间的联系
概述:<uses-feature>用来声明应用中需要用的硬件和软件的功能。
硬件特性:表明您的应用需要用的硬件功能。
功能类型 | 特征描述 | 描述 |
音频 | android.hardware.audio.low_latency | 该应用程序使用低延迟的音频设备上的管道,声音输入或输出延迟或滞后敏感。 |
蓝牙 | android.hardware.bluetooth | 该应用程序使用蓝牙无线功能,在设备中。 |
相机 | android.hardware.camera | 该应用程序使用该设备的摄像头。如果设备支持多个摄像头,应用程序使用相机,面对从屏幕上移开。 |
android.hardware.camera.autofocus | 子功能。该应用程序使用设备相机的自动对焦能力。 | |
android.hardware.camera.flash | 子功能。该应用程序使用设备相机的闪光灯。 | |
android.hardware.camera.front | 子功能。该应用程序使用设备上的前置摄像头。 | |
android.hardware.camera.any | 该应用程序使用至少一个摄像头朝向任何方向。使用当前在偏好android.hardware.camera的, 如果不需要的背面朝相机。 | |
位置 | android.hardware.location | 该应用程序使用设备上的一个或多个特征,确定位置,如GPS定位,网络位置或细胞的位置。 |
android.hardware.location.network | 子功能。该应用程序使用从设备支持的基于网络的地理定位系统获得的粗略的位置坐标 | |
android.hardware.location.gps | 子功能。该应用程序使用设备上的全球定位系统接收器获得的精确位置坐标。 | |
麦克风 | android.hardware.microphone | 该应用程序使用设备上的麦克风。 |
NFC | android.hardware.nfc | 该应用程序使用近场通讯在设备的收音功能。 |
传感器 | android.hardware.sensor.accelerometer | 该应用程序使用的移动设备上的一个加速度计的运动读数。 |
android.hardware.sensor.barometer | 该应用程序使用该设备的晴雨表。 | |
android.hardware.sensor.compass | 该应用程序使用设备上的磁力计(罗盘)方向读数。 | |
android.hardware.sensor.gyroscope | 该应用程序使用该设备的陀螺仪传感器。 | |
android.hardware.sensor.light | 该应用程序使用该设备的光传感器。 | |
android.hardware.sensor.proximity | 该应用程序使用该设备的接近传感器。 | |
屏幕 | android.hardware.screen.landscape | 该应用程序需要横向。 |
android.hardware.screen.portrait | 该应用程序需要纵向。 | |
电话 | android.hardware.telephony | 该应用程序使用电话功能的移动设备,例如,电话与数据通信业务的无线电。 |
android.hardware.telephony.cdma | 子功能。该应用程序使用CDMA电话收音机功能在设备上的。 | |
android.hardware.telephony.gsm | 子功能。应用程序在设备上采用了GSM电话收音机功能。 | |
电视 | android.hardware.type.television | 应用程序是专为电视用户体验。 |
触摸屏 | android.hardware.faketouch | 该应用程序使用基本的的触摸互动活动,如“点击”,“点击”,并拖动。 |
android.hardware.faketouch.multitouch.distinct | 不同的应用程序执行跟踪的两个或两个以上的“手指”上假的触摸界面。这是的faketouch功能的一个超集。 | |
android.hardware.faketouch.multitouch.jazzhand | 不同的应用程序执行的跟踪5个或以上的“手指”上假的触摸界面。这是的faketouch功能的一个超集。 | |
android.hardware.touchscreen | 该应用程序使用的触摸屏功能,比基本触摸事件,如一扔,更具互动性的手势。这是的基本faketouch功能的一个超集。 | |
android.hardware.touchscreen.multitouch | 应用程序使用在设备屏幕上的两个基本点的多点触控功能,如捏的手势,但,不需要独立跟踪触及。这是触摸屏功能的一个超集。 | |
android.hardware.touchscreen.multitouch.distinct | 子功能。在设备屏幕上的应用程序采用了先进的多点多点触控功能,如跟踪两个或两个以上的点完全独立。这是一个多点触控功能的超集。 | |
android.hardware.touchscreen.multitouch.jazzhand | 在设备屏幕上的应用程序采用了先进的多点多点触控功能,跟踪到五点完全独立。这是一个独特的多点触控功能的超集。 | |
USB | android.hardware.usb.host | 该应用程序使用USB主机模式功能(表现为主机和USB设备连接到)。 |
android.hardware.usb.accessory | 该应用程序使用的USB附件功能(表现为USB设备连接到USB主机)。 | |
无线上网 | android.hardware.wifi | 应用程序使用802.11网络(WIFI)功能的设备上的。 |
软件功能:表明您的应用程序使用或需要的软件功能。
特点 | 属性值 | 描述 |
应用程序! | android.software.app_widgets | 该应用程序使用或提供应用小工具,仅应安装的设备上,包括一个主屏幕或类似的位置,用户可以应用小工具嵌入。 |
蓝牙低功耗 | android.software.bluetooth_le | 该应用程序使用蓝牙低能量的API只能够与其他设备通过蓝牙低功耗通信设备,应安装。这也隐含声明的 |
主屏幕 | android.software.home_screen | 主屏幕更换应用程序的行为,应只安装在设备主屏幕上的应用程序支持第三方。 |
输入法 | android.software.input_methods | 该应用程序提供了一个自定义的输入法应该只能安装在设备支持第三方输入法。 |
动态壁纸 | android.software.live_wallpaper | 该应用程序使用或提供动态壁纸,应该只能安装在设备支持动态壁纸。 |
SIP / VOIP | android.software.sip | 该应用程序使用SIP服务在设备上,只应安装上支持SIP的设备。 |
android.software.sip.voip | 子功能。该应用程序使用基于SIP的VoIP服务在设备上。 此子功能隐式声明 | |
权限和功能之间的联系:
类别 | 需要的权限 | 要求的功能 |
蓝牙 | BLUETOOTH | android.hardware.bluetooth (见特殊处理的蓝牙功能的详细信息。) |
BLUETOOTH_ADMIN | android.hardware.bluetooth | |
相机 | CAMERA | android.hardware.camera 和 android.hardware.camera.autofocus |
位置 | ACCESS_MOCK_LOCATION | android.hardware.location |
ACCESS_LOCATION_EXTRA_COMMANDS | android.hardware.location | |
INSTALL_LOCATION_PROVIDER | android.hardware.location | |
ACCESS_COARSE_LOCATION | android.hardware.location.network 和 android.hardware.location | |
ACCESS_FINE_LOCATION | android.hardware.location.gps 和 android.hardware.location | |
麦克风 | RECORD_AUDIO | android.hardware.microphone |
电话 | CALL_PHONE | android.hardware.telephony |
CALL_PRIVILEGED | android.hardware.telephony | |
MODIFY_PHONE_STATE | android.hardware.telephony | |
PROCESS_OUTGOING_CALLS | android.hardware.telephony | |
READ_SMS | android.hardware.telephony | |
RECEIVE_SMS | android.hardware.telephony | |
RECEIVE_MMS | android.hardware.telephony | |
RECEIVE_WAP_PUSH | android.hardware.telephony | |
SEND_SMS | android.hardware.telephony | |
WRITE_APN_SETTINGS | android.hardware.telephony | |
WRITE_SMS | android.hardware.telephony | |
无线上网 | ACCESS_WIFI_STATE | android.hardware.wifi |
CHANGE_WIFI_STATE | android.hardware.wifi |
CHANGE_WIFI_MULTICAST_STATE | android.hardware.wifi |