众所周知,google play store存在根据apk所使用到的功能来过滤的机制,这个机制会控制在不同的硬件设备上显示的apk数量。在盒子开发上,很多硬件功能没有,比如说:摄像头、加速度传感器、指南针、陀螺仪等等。如果不添加相应的属性在gms中的话,play store商店里面很多apk就无法显示。针对这些硬件属性,特有此博客作出一些简介。欢迎大神指点,感激不尽。
指出应用使用或需要某项硬件功能,请在 android:name 属性中声明相应的值(以 “android.hardware” 开头)。 请在每次声明一项硬件功能时使用单独的 元素。
android.hardware.audio.low_latency
应用使用设备的低延迟时间音频管道,该管道可以减少处理声音输入或输出时的滞后和延迟。
android.hardware.audio.output
应用使用设备的音响设备、音频耳机插孔、蓝牙流式传输能力或类似机制传输声音。
android.hardware.audio.pro
应用使用设备的高端音频功能和性能能力。
android.hardware.microphone
应用使用设备的麦克风记录音频。
android.hardware.bluetooth
应用使用设备的蓝牙功能,通常是为了与其他支持蓝牙的设备通信。
android.hardware.bluetooth_le
应用使用设备的低功耗蓝牙无线电功能。
android.hardware.camera
应用使用设备的后置相机。只有前置相机的设备不会列出该功能,因此如果您的应用可与任何朝向的相机通信,请改用 android.hardware.camera.any 功能。
android.hardware.camera.any
应用使用设备的其中一个相机或用户为设备连接的外置相机。 如果您的应用不要求相机必须是后置式,请使用此值来替代 android.hardware.camera。
android.hardware.camera.autofocus
应用使用设备相机支持的自动对焦功能。
应用通过使用该功能暗示其还使用 android.hardware.camera 功能,除非这个父功能在声明时使用了 android:required=”false”。
android.hardware.camera.capability.manual_post_processing
应用使用设备相机支持的 MANUAL_POST_PROCESSING 功能。
您的应用可以通过该功能替换相机的自动白平衡功能。 使用 android.colorCorrection.transform、android.colorCorrection.gains 以及 TRANSFORM_MATRIX 的 android.colorCorrection.mode。
android.hardware.camera.capability.manual_sensor
应用使用设备相机支持的 MANUAL_SENSOR 功能。
该功能隐含对自动曝光锁定 (android.control.aeLock) 的支持,该支持可以让相机的曝光时间和灵敏度一直固定在特定值。
android.hardware.camera.capability.raw
应用使用设备相机支持的 RAW 功能。
该功能暗示设备可以保存 DNG(原始)文件,并且设备的相机提供您的应用直接处理这些原始图像所需的 DNG 相关元数据。
android.hardware.camera.external
应用与用户为设备连接的外置相机通信。 但该功能不能保证外置相机可供您的应用使用。
android.hardware.camera.flash
应用使用设备相机支持的闪光功能。
应用通过使用该功能暗示其还使用 android.hardware.camera 功能,除非这个父功能在声明时使用了 android:required=”false”。
android.hardware.camera.front
应用使用设备的前置相机。
应用通过使用该功能暗示其还使用 android.hardware.camera 功能,除非这个父功能在声明时使用了 android:required=”false”。
android.hardware.camera.level.full
应用使用设备的至少一个相机提供的 FULL 级图像捕捉支持。 提供 FULL 支持的相机可提供快速捕捉功能、逐帧控制和手动后期处理控制。
android.hardware.type.automotive
应用设计为在车辆内的一组屏幕上显示其 UI。 用户使用硬按钮、触摸、旋转控制器以及类鼠标界面与应用进行交互。 车辆的屏幕通常出现在车辆的中控台或仪表板中。 这些屏幕的尺寸和分辨率通常有限。
注:切记,由于用户是在驾车时使用这类应用 UI,应用必须尽量不要让驾驶员分心。
android.hardware.type.television
(已弃用;请改用 android.software.leanback。)
应用设计为在电视上显示其 UI。该功能将“电视”定义为一种典型的起居室电视体验:显示在大屏幕上,用户坐在远处,主流输入形式是类似方向键的东西,一般不使用鼠标、指示器或触摸设备。
android.hardware.type.watch
应用设计为在手表上显示其 UI。手表佩戴在身体(例如手腕)上。 用户在很近的距离与设备互动。
android.hardware.fingerprint
应用使用设备的生物识别硬件读取指纹。
android.hardware.gamepad
应用捕获来自设备本身或其连接的手柄的游戏控制器输入。
android.hardware.consumerir
应用使用设备的红外线 (IR) 功能,通常是为了与其他消费 IR 设备通信。
android.hardware.location
应用使用设备上的一项或多项功能来确定位置,例如 GPS 位置、网络位置或基站位置。
android.hardware.location.gps
应用使用从设备上的全球定位系统 (GPS) 接收器获得的精确位置坐标。
应用通过使用该功能暗示其还使用 android.hardware.location 功能,除非这个父功能在声明时使用了属性 android:required=”false”。
android.hardware.location.network
应用使用从设备上支持的基于网络的地理定位系统获得的粗略位置坐标。
应用通过使用该功能暗示其还使用 android.hardware.location 功能,除非这个父功能在声明时使用了属性 android:required=”false”。
android.hardware.nfc
应用使用设备的近距离无线通信 (NFC) 功能。
android.hardware.nfc.hce
(已弃用。)
应用使用设备上托管的 NFC 卡模拟。
OpenGL ES 硬件功能
android.hardware.opengles.aep
应用使用设备上安装的 OpenGL ES Android 扩展包。
android.hardware.sensor.accelerometer
应用使用从设备的加速计读取的运动信息来检测设备的当前方向。 例如,应用可以使用加速计读数来确定何时在纵向与横向方向之间切换。
android.hardware.sensor.ambient_temperature
应用使用设备的外界(环境)温度传感器。例如,天气应用可以报告室内或室外温度。
android.hardware.sensor.barometer
应用使用设备的气压计。例如,天气应用可以报告气压。
android.hardware.sensor.compass
应用使用设备的磁力计(罗盘)。例如,导航应用可以用户当前面朝的方向。
android.hardware.sensor.gyroscope
应用使用设备的陀螺仪来检测旋转和倾斜,从而形成一个六轴方向系统。 通过使用该传感器,应用可以更顺利地检测其是否需要在纵向与横向方向之间切换。
android.hardware.sensor.hifi_sensors
应用使用设备的高保真 (Hi-Fi) 传感器。例如,游戏应用可以检测用户的高精度移动。
android.hardware.sensor.heartrate
应用使用设备的心率监测器。例如,健身应用可以报告用户心率随时间的变化趋势。
android.hardware.sensor.heartrate.ecg
应用使用设备的超声波心动图 (ECG) 心率传感器。例如,健身应用可以报告有关用户心率的更详细信息。
android.hardware.sensor.light
应用使用设备的光传感器。例如,应用可以根据环境光照条件显示两种不同配色方案中的一种。
android.hardware.sensor.proximity
应用使用设备的近程传感器。例如,电话应用可以在其检测到用户握持的设备贴近身体时关闭设备的屏幕。
android.hardware.sensor.relative_humidity
应用使用设备的相对湿度传感器。例如,天气应用可以利用湿度来计算和报告当前露点。
android.hardware.sensor.stepcounter
应用使用设备的计步器。例如,健身应用可以报告用户需要走多少步才能达到每天的计步目标。
android.hardware.sensor.stepdetector
应用使用设备的步测器。例如,健身应用可以利用每步的间隔时间来推测用户正在进行的锻炼类型。
android.hardware.screen.landscape
android.hardware.screen.portrait
应用要求设备使用纵向或横向方向。 如果您的应用同时支持这两种方向,则无需声明任一功能。
例如,如果您的应用要求纵向方向,则应声明以下功能,使得只有支持纵向方向(始终或由用户选择)的设备才能运行您的应用:
默认情况下假定两种方向均非要求的方向,这样您的应用就可以安装在支持一种或同时支持两种方向的设备上。 不过,如果应用的任何 Activity 利用 android:screenOrientation 属性请求在特定方向下运行,则此声明意味着您的应用要求该方向。 例如,如果您使用 “landscape”、”reverseLandscape” 或 “sensorLandscape” 声明 android:screenOrientation,则您的应用将只能安装在支持横向方向的设备上。
最佳做法是,您仍应使用 元素来声明对该方向的要求。 如果您使用 android:screenOrientation为 Activity 声明了某个方向,但实际并无此要求,可通过使用 元素并加入 android:required=”false” 声明该方向来停用这一要求。
为实现后向兼容性,任何运行 Android 3.1(API 级别 12)或更低版本的设备都同时支持横向和纵向方向。
android.hardware.telephony
应用使用设备的电话功能,例如提供数据通信服务的无线电话。
android.hardware.telephony.cdma
应用使用码分多址接入 (CDMA) 无线电话系统。
应用通过使用该功能暗示其还使用 android.hardware.telephony 功能,除非这个父功能在声明时使用了 android:required=”false”。
android.hardware.telephony.gsm
应用使用全球移动通信系统 (GSM) 无线电话系统。
应用通过使用该功能暗示其还使用 android.hardware.telephony 功能,除非这个父功能在声明时使用了 android:required=”false”。
android.hardware.faketouch
应用使用基本的触摸交互事件,例如点按和拖动。
声明为必需时,此功能表示应用只兼容模拟触摸屏(“假触摸”界面)或实际具有触摸屏的设备。
带有假触摸界面的设备为用户提供模拟部分触摸屏功能的用户输入系统。 例如,鼠标或遥控器可以驱动屏幕光标。 如果您的应用需要基本的点击式交互(换言之,它在只使用方向键控制器的情况下无法正常工作),则应声明该功能。 由于这是最低水平的触摸交互,因此您还可以在提供更复杂触摸界面的设备上使用声明该功能的应用。
注:默认情况下应用需要 android.hardware.touchscreen。 如果您希望自己的应用可供提供假触摸界面的设备使用,则必须按如下方式显式声明不要求提供触摸屏:
android.hardware.faketouch.multitouch.distinct
应用在假触摸界面上区分两个或更多个“手指”的触摸轨迹。 这是 android.hardware.faketouch 功能的一个超集。 声明为必需时,此功能表示应用只兼容模拟区分两个或更多个手指的触摸轨迹或实际具有触摸屏的设备。
不同于 android.hardware.touchscreen.multitouch.distinct 所定义的区分式多点触摸,通过假触摸界面支持区分式多点触摸的输入设备并不支持所有双指手势,因为输入会转换成屏幕上的光标移动。 也就是说,在此类设备上的单指手势移动光标,双指划动触发单指触摸事件,而其他双指手势则触发相应的双指触摸事件。
提供双指触摸触控板进行光标移动的设备可支持该功能。
android.hardware.faketouch.multitouch.jazzhand
应用在假触摸界面上区分五个或更多个“手指”的触摸轨迹。 这是 android.hardware.faketouch 功能的一个超集。 声明为必需时,此功能表示应用只兼容模拟区分五个或更多个手指的触摸轨迹或实际具有触摸屏的设备。
不同于 android.hardware.touchscreen.multitouch.jazzhand 所定义的区分式多点触摸,通过假触摸界面支持单手多点触摸的输入设备并不支持所有五指手势,因为输入会转换成屏幕上的光标移动。 也就是说,在此类设备上的单指手势移动光标,多指手势触发单指触摸事件,而其他多指手势则触发相应的多指触摸事件。
提供五指触摸触控板进行光标移动的设备可支持该功能。
android.hardware.touchscreen
应用利用设备的触摸屏功能来实现比基本触摸事件交互性更强的手势,例如滑屏。 这是 android.hardware.faketouch 功能的一个超集。
默认情况下,您的应用需要该功能。因此,您的应用不可供默认情况下只提供模拟触摸界面(“假触摸”)的设备使用。 如果您希望自己的应用可供提供假触摸界面的设备(甚至只提供方向键控制器的设备)使用,则必须通过在声明 android.hardware.touchscreen 时加入 android:required=”false” 来显式声明不要求提供触摸屏。 如果您的应用使用(但并不需要)真触摸屏界面,则应添加此声明。
如果您的应用确实需要触摸界面(以便执行滑屏之类的更高级触摸手势),则您无需声明任何触摸界面功能,因为它们在默认情况下是必需功能。 不过,最好还是显式声明您的应用使用的所有功能。
如果您需要进行更复杂的触摸交互(例如多指手势),则应声明您的应用使用高级触摸屏功能。
android.hardware.touchscreen.multitouch
应用使用设备的基本两点式多点触摸功能(例如实现张合手势的功能),但应用不需要独立追踪触摸轨迹。 这是 android.hardware.touchscreen 功能的一个超集。
应用通过使用该功能暗示其还使用 android.hardware.touchscreen 功能,除非这个父功能在声明时使用了 android:required=”false”。
android.hardware.touchscreen.multitouch.distinct
应用使用设备的高级多点触摸功能来独立追踪两点或更多点的轨迹。 该功能是 android.hardware.touchscreen.multitouch 功能的一个超集。
应用通过使用该功能暗示其还使用 android.hardware.touchscreen.multitouch 功能,除非这个父功能在声明时使用了 android:required=”false”。
android.hardware.touchscreen.multitouch.jazzhand
应用使用设备的高级多点触摸功能来独立追踪五点或更多点的轨迹。 该功能是 android.hardware.touchscreen.multitouch 功能的一个超集。
应用通过使用该功能暗示其还使用 android.hardware.touchscreen.multitouch 功能,除非这个父功能在声明时使用了 android:required=”false”。
android.hardware.usb.accessory
应用表现为 USB 设备,与 USB 主机相连。
android.hardware.usb.host
应用使用与设备相连的 USB 附件。设备充当 USB 主机。
android.hardware.wifi
应用使用设备上的 802.11 网络 (Wi-Fi) 功能。
android.hardware.wifi.direct
应用使用设备上的 Wi-Fi Direct 网络功能。
指出应用使用或需要某项软件功能,请在 android:name 属性中声明相应的值(以 “android.software” 开头)。 请在每次声明一项软件功能时使用单独的 元素。
android.software.sip
应用使用会话发起协议 (SIP) 服务。通过使用 SIP,应用可以支持互联网电话操作,例如视频会议和即时消息传递。
android.software.sip.voip
应用使用基于 SIP 的互联网语音协议 (VoIP) 服务。通过使用 VoIP,应用可以支持实时互联网电话操作,例如双向视频会议。
应用通过使用该功能暗示其还使用 android.software.sip 功能,除非这个父功能在声明时使用了 android:required=”false”。
android.software.webview
应用显示来自互联网的内容。
android.software.input_methods
应用使用新的输入法,该输入法由开发者在 InputMethodService 中定义。
设备管理软件功能
android.software.backup
应用加入处理备份和恢复操作的逻辑。
android.software.device_admin
应用通过设备管理员来强制执行设备规范。
android.software.managed_users
应用支持二级用户和托管配置文件。
android.software.securely_removes_users
应用可永久性移除用户及其相关数据。
android.software.verified_boot
应用加入处理设备验证启动功能结果的逻辑,该逻辑可检测设备的配置在重新启动操作期间是否发生了变化。
android.software.midi
应用利用乐器数字化接口 (MIDI) 协议连接到乐器或输出声音。
android.software.print
应用加入打印设备上所显示文档的命令。
android.software.leanback
应用呈现专为在大屏幕(例如电视)上观看而设计的 UI。
android.software.live_tv
应用流式传输直播电视节目。
android.software.app_widgets
应用使用或提供应用小部件,并且只应安装在带有可供用户嵌入应用小部件的主屏幕或类似位置的设备上。
android.software.home_screen
应用起到替代设备主屏幕的作用。
android.software.live_wallpaper
应用使用或提供包含动画的壁纸。
一些硬件和软件功能常量是在相应 API 发布后提供给应用使用。例如,android.hardware.bluetooth 功能是在 Android 2.2(API 级别 8)中添加的,但它引用的 Bluetooth API 则是在 Android 2.0(API 级别 5)添加的。 因此,一些应用在能够利用 系统声明其需要某个 API 之前就已经具备了使用该 API 的能力。
为防止无意间提供这些应用,Google Play 会假定特定硬件相关权限规定,默认情况下需要底层硬件功能。 例如,使用蓝牙的应用必须在 元素中请求 BLUETOOTH 权限 — 对于旧版应用,Google Play 假定权限声明意味着,应用需要底层 android.hardware.bluetooth 功能,并根据该功能设置过滤。 表 2 所列权限隐含的功能要求等同于 元素中声明的功能。
请注意, 声明(包括任何声明的 android:required 属性)始终优先于表 2 中权限所隐含的功能。对于上述任一权限,您都可以通过在 元素中使用 android:required=”false” 属性显式声明隐含功能来停用根据隐含功能进行过滤。 例如,要想停用根据 CAMERA 权限进行任何过滤,需要向清单文件添加下面这个 声明: