ACD系列翻译之三

来源:互联网 发布:怎么在淘宝搜耽美 编辑:程序博客网 时间:2024/06/05 05:44



7 Hardware兼容

 

Android可以让设备商生成各种新奇的设备并提供有趣的API,而且开发者也可以使用Android平台上的API实现各种新奇的应用程序并运行在尽可能多的设备上面。本节的这些就是要寻求一个平衡。

如果你的设备提供了一个硬件功能,并开放了API给第三方开发者,那么API的行为必须和SDK文档中一样。如果SDK文档中的某些API涉及到了一个可选硬件,而设备并没有这个硬件的话,那么你得做到下面这些要求:

这些API必须存在,以合理的方式实现一些空操作。

如果API文档中允许有返回值,就返回null,否则就返回什么空操作的对象。但绝不能返回文档中没有规定的异常。

关于这一点,这里一个经典的例子,就是电话功能。即使你的设备上面不支持打电话,也应该让相应的APK做一些合理的空操作。

定制系统必须通过android.content.pm.PackageManagergetSystemAvaliableFeatures()hasSystemFeature(String)这两个方法向开发者提供准确的硬件配置信息。

7.1 Display and Graphics

为了让APP可以运行在多种硬件环境下,Android2.3可以根据当前硬件配置自动调用APP的资源和UI布局。定制系统必须实现相应的API和功能。

7.1.1 Screen Configuration

定制设备的屏幕在像素方面没有要求,但必须满足下面的条件:

屏幕物理尺寸至少为2.5inch

density至少为100dpi

外观上的比例必须在1.3334:3)和1.779(16:9)之间

使用的显示技术包括“squarepixels”(与屏幕的每行采样率有关)

默认情况下,AndroidFramework会自动计算显示属性,如屏幕大小等。如果定制设备改变了默认行为,或者使用的配置与上面的条件不符的话,一定要联系AndroidCompatibility Team并在他们的指导下进行。

Android只能同时支持一种显示配置。像电视可以支持1080P,720P等多种屏幕的那种功能,在未来版本中可能会实现。

7.1.2 Display Metrics

定制设备必须在android.util.DisplayMetrics

中准确报告设备的显示属性。

7.1.3 Declared Screen Support

一个APP可以通过在AndroidManifest.xml文件中使用<supports-screens>

属性来声明自己支持哪种屏幕尺寸。对于small,medium,large这三种屏幕尺寸,定制设备必须正确实现。

7.1.4 Screen Orientation

符合兼容性标准规定的设备必须能满足应用对屏幕方向的请求(portraitlandscape两种屏幕方向)。定制设置可以选择任何一个方向做为默认方向。如何设备不能在物理上进行旋转,还可以通过“letterboxing”(宽银幕式)应用程序来满足要求。

设备必须能通过android.content.res.Configuration.orientation,

android.view.Display.getOrientation()

或者其它API提供精确的方向。

7.1.5 3D Graphics Acceleration

定制设备至少要支持OpenGLES1.0。对于缺少3D加速硬件的设备来说,Android源码默认提供了软件实现。但是,请尽量支持OpenGLES 2.0

如果定制设备没有提供对2.0的支持的话,就不要通过API告诉开发者你支持。这时,你就需要注意下面的地方了:

managedAPI(比如GLES10.getString()方法)绝不能告诉调用者设备支持2.0

本地C/C++OpenGLAPI(指对APP可用的本地库,如:libGLES_v1CM.so,libGLES_v2.so,libEGL.so等)绝不能告诉调用者设备支持2.0

相应地,如果设备支持2.0,也要通过上面的方式告诉调用者。

Android2.3可以支持让APP选择它们使用哪种OpenGLtexture

压缩格式。这些格式与设备商的实现有关。Android2.3没有强制要求设备一定要具体哪种格式,但是,设备商必须通过OpenGL中的getString方法准确报告设备支持哪些格式。

7.2 Input Devices

Android2.3可以支持很多种输入设置,定制设备不一定全部支持,但必须支持本节要求的输入设备。

7.2.1 Keyboard

必须支持输入法框架(InputManagement Framework)

无论是否有硬键盘,都必须提供至少一种软键

可以提供多个软键盘。

可以提供硬键盘,但硬键盘必须符合下面格式中的一种:

android.content.res.Configuration.keyboard

QWERTY,or 12-key

7.2.2 Non-touch Navigation

可以去掉Non-touchNavigation(轨迹球、D-Pad、滚轮等)

必须通过android.content.res.Configuration.navigation

返回正确的值。

必须提供合理的UI交互机制,比如文本的选择和编辑等,并与输入法管理兼容。对Non-touchNavigation的设备,Android提供了默认的文本选择实现机制。

7.2.3 Navigation key

Home,MenuBack三种功能对Android至关重要,定制设备必须让系统无论何时,不管APP处在什么状态都有这三种功能。这三种功能最好用专用的键来实现。也可以用软件、手势、触摸板来实现,但必须永远可用并且不能与APP的正常显示区域冲突。

另外,定制设备最好提供一个搜索专用键。当然,打电话和挂电话最好也有专用键。

7.2.4 Touchscreen Input

设备必须有一个电容或电阻的触摸屏

设备必须通过android.content.res.Configuration

报告正确的触摸屏类型。

如果屏幕支持多点触摸的话,最好支持fullyindependently tracked pointers

7.3 Sensors

通过Android2.3API,我们可以访问各种各样的传感器。这样要求设备商遵守一些规范:

必须通过android.content.pm.PackageManager

准确报告某个传感器是否存在。

必须通过SensorManager.getSensorList()

或类似的方法提供一个所支持的传感器的列表。

必须合理地实现所有的传感器API。比如,当没有相应传感器时不要调用开发者注册的监听器。

Android2.3引入了一个“streaming”传感器的概念,即使传感器数据没有改变,也会不停地返回数据给用户。对于SDK文档中标明了是”streaming”API,设备商必须提供持续的、周期性的数据。

7.3.1 Accelerometer

定制设备最好包含一个三维加速仪,但不是必须有。包含三维加速仪必须遵守下面的规范:

必须以50HZ或更快的速度分发事件。

必须与AndroidAPI中规定的传感器坐标系统兼容

必须可以测量自由落体、2g或者更多基于三维向量的加速度。

必须至少有8-bits

的精度。

必须保证偏差小于0.05m/s^2

7.3.2 Magnetometer

定制设备最好包含一个三维的磁力计,但不是必须有,如果有的话,要遵守下面的规范:

规范细节略过。。。

7.3.3 GPS

定制设备最好包含一个GPS接收器,并且最好包含一些辅助定位技术,最小化GPS定位时间。

7.3.4 Gyroscope

设备最好包含一个陀螺仪(比如angularchange sensor

)。要包含这个仪器的话,先要包含3维加速传感器才可以。包含陀螺仪的话,要遵守下面的规范:

规范细节略过。。。

7.3.5 Barometer

定制设备如果有气压计的话,要遵守下面规范:

略过。。。

7.3.6 Thermometer

定制设备可以有温度计,但最好别带这玩意儿。如果有的话,必须能量出CPU的温度,但绝不能量其它的温度。所以,温度计在Android2.3API中是被反对的。

7.3.7 Photometer

这个光度计可以有。

7.3.8 Proximity Sensor

如果定制设备包含了距离测量仪的话,必须要能测试一个和屏幕同一个方向的物体的距离。精度方面,至少要有1-bit的精度。如果设备上的距离测量仪是测量其它方向的话,就不能把它通过API开放给上层。

7.4 Data Connectivity

定制设备必须要满足本节提到的对每种数据通信方式的要求。

7.4.1 Telephony

Telephony包含语音通话和SMS,如果定制设备没有这个功能的话,就不能报告android.hardware.telephony

或者其它特征。定制设备也可以没有用于Telephony的硬件。但如果设备具备GSMCDMAtelephony硬件模块,那么它必须实现用于Telephony的所有API。没有telephony硬件模块的设备也必须把所有TelephonyAPI实现为空方法。

7.4.2 (IEEE 802.11)WiFi

Android2.3设备最好包含802.11标准中的一个或多个(b/g/a/n)。如果定制设备支持802.11的话,那么它必须实现相应的API

7.4.3 Bluetooth

定制设备如果支持蓝牙的话,必须让SDK文档中的基于RFCOMM的蓝牙API可用。其它的像A2DPAVRCPOBEX等,也最好实现。

CTS包含对基本的蓝牙API的测试。但由于蓝牙是设备间的通信,而CTS只能运行在一个设备上,因此,设备必须通过附录A中描述的人工测试才可以。

7.4.4 Near-Field Communications

设备如果支持NFC的话,还要遵守下面规范:

必须要通过android.content.pm.PackageManager.hasSystemFeature()

方法报告android.hardware.nfc

属性。

必须能通过下面的NFD标准读定NDEF消息。

具体细节略过。。。

必须能通过下面的点对点标准传输数据。

具体细节略过。。。

NFC扫描时,必须要扫描所能支持的所有技术。

当设备被唤醒且屏幕点亮后,最好进行扫描。

另外,设备最好可以支持下面这些被广泛使用的MIFARE技术

具体细节略过。。。

Android2.3.3有一些专门用于MIFAREAPI,如果设备支持MIFARE的话,还要遵守下面规范:

具体细节略过。。。

如果设备没有NFC硬件的话,就绝不能在调用android.content.pm.PackageManager.hasSystemFeature()

传入android.hardware.nfc

的时候返回true。并且,要把Android2.3中关于NFCAPI实现为空操作。

android.nfc.NdefMessageandroid.nfc.NdefRecord

这两个类代表了一个与协议无关的数据格式。无论是否支持NFC,定制设备都必须实现这些API

7.4.5 Minimum Network Capability

定制设备必须至少支持一种速度为200Kbit/sec或更高网络连接。比如EDGEHSPAEVDO802.11gEthernet等。把有线连接作为主要数据连接的设备最好再支持至少一种无线数据连接如802.11WiFi

7.5 Camera

定制设备最好包含一个后向摄像头,还可能有前向摄像头。

7.5.1 后向摄像头

如果设备支持后向摄像头的话,必须遵守下面的规范:

细节略过。。。

7.5.2 前向摄像头

如果设备支持前向摄像头的话,必须遵守下面的规范:

细节略过。。。

7.5.3 Camera API Behavior

如果有摄像头的话,无论是前向或后向摄像头,都必须实现下面的API

如果应用程序从没有调用android.hardware.Camera.Parameters.setPreviewFormat(int)

,那么设备必须向APP使用android.hardware.PixelFormat.YCbCr_420_SP

格式的预览数据提供给APP的回调方法。

如果APP注册了一个android.hardware.Camera.PreviewCallback

,那么,当系统调用onPreviewFrame()方法把预览数据(byte[])传递过去的时候,预览数据必须被编码成NV21格式。也就是说,这种情况下NV21必须是默认的编码格式。

设备最好支持YV12格式(通过常量android.graphics.ImageFormat.YV12表示)作为前向和后向摄像头的预览数据。这一点在未来的版本中可能要求定制设备必须做到。

无论设备是否支持硬件上的自动对焦或其它功能,定制设备都必须实现Android2.3SDK文档中规定的所有与Camera有关的API。比如,即使Camera不支持自动对焦,系统也必须调用任何已经注册的android.hardware.Camera.AutoFocusCallback

实例。请注意:这只适用于前向摄像头。比如即使大多数前向摄像头不支持自动对焦,相应的API仍然与文档中描述的一样。

只要低层硬件支持,设备应该能够识别并且必须实现所有android.hardware.Camera.Parameters

这个类中定义的常量。如果设备的硬件不支持某个特性,相应的API也应该与文档中描述的一样。如果android.hardware.Camera.setParameters()

接收到了没有在android.hardware.Camera.Parameters

这个类中定义的常量,设备就不应该识别并处理。也就是说,设备必须支持所有标准的参数,绝不能识别定制的参数。

7.5.4 Camera Orientation

无论前向或者后向摄像头,只要存在就必须可以旋转。

7.6 Memory and Storage

Android2.3的基本功能之一是可以安装和运行APP。为了让APP正常运行,设备必须满足本节提出的要求。

7.6.1 Minimum Memory and Storage

定制设备必须至少提供给kerneluserspace128MB的内存。这128MB已经包含了提供给radio等不受内核控制的组件的。定制设备还必须至少有150MB的非易失用户数据存储空间,也就是说/data分区至少要有150M

除了上面的要求以外,设备最好再提供至少1GB的非易失存储空间让用户存放数据。这个要求在未来版本中可能变成强制的。AndroidAPI中包含了一个下载管理器供其它APP调用来下载数据。这个下载管理器必须能下载单个大小为55MB或更大的文件,最好能下载100MB或更大的文件。

7.6.2 Application Shared Storage

设备必须为APP提供至少1GBsharedstorage。这个sharedstorage最好被挂载到默认目录下(一般是/sdcard),否则,就必须提供一个/sdcard的符号链接并链接到这个sharedstorage。一个APP只有具备android.permission.WRITE_EXTERNAL_STORAGE

权限才可以向sharedstorage写入数据。

设备可以拿SD卡当作sharedstorage,也可以从内部存储空间中分出一部分来。但无论是哪种形式,设备都要提供从PC操作这个sharedstorage的机制。比如USB massstorage或者Media Transfer Protocol

这里有两个例子供参考。假设一个设备提供了一个1GB或者更大的FAT格式的SD卡,这个SD卡必须连同设备一起卖给用户,并且必须挂载到默认目录下。如果设备是用内部存储空间来做sharedstorage的话,那么必须至少为1GB,并且被挂载到/sdcard下,或有一个/sdcard的符号链接可以链接到它被挂载的位置。

如果一个设备支持多个sharedstorage路径的话,最好修改ContentProviderMediaProvider这样的程序,让它们可以支持这些路径。

7.7 USB

设备必须可以作为一个USB客户端以USBA端口连接到PC上去。

必须支持基于USBADB

必须支持USBmass storage规范,让用户可以通过PC访问/sdcard上的数据。

最好使用microUSB

可以在设备上使用非标准的端口,但必须能把它连接到USBA端口。

原创粉丝点击