Android API 学习日记----《设备兼容性》

Device Compatibility

Android是设计能够运行在手机、平板和电视这样不同的设备上。作为开发者,设备的范围为你的程序提供一个庞大的用户群体。为了你的程序能够成功的运行在所有的设备上,必须适应一个可变的特性和为了适配不同的屏幕配置而提供一个灵活的用户界面。


为方便你超这个方向努力,Android提供了动态的程序框架,你能在静态文件中提供指定的资源(例如,为不同的屏幕尺寸提供不能的布局文件)。Android会根据当前的设备配置加载合适的资源。为了长远打算,你的程序设计和一些附加的程序资源单独上交一个程序包(APK)提供了各种设备的优化的用户体验。


如果需要的话,从谷歌商店你能指定程序的功能特点和能够安装的设备类型。这页说明你怎样控制哪些程序可以控制你的程序,及怎么样编写程序确保能到达正确的用户。更多关于怎样制作适应不同设备的程序,请读Supporting Different Devices。


什么是兼容性?

当你阅读更多的Android开发,你可能会遇到“兼容性”一词在各种情况下。有两个类型的兼容性:设备兼容和程序兼容。

因为Android是一个开放源码的项目,任何生产厂家都可以再自己的硬件设备上使用Android操作系统。然而,一个设备的“Android兼容”是只有当它能够正常的运行Android环境下编写的程序。Android的兼容性计划定义了Android环境的具体细节并且必须要通过兼容性测试套件才能认为是兼容的。

一个程序的开发,你不需要担心一个设备是否是兼容Android的,因为只有Android兼容的设备才会包含谷歌商店。因此你可以放心,只要用户是从谷歌商店下载程序就一定是Android兼容的设备。

然而,你需要考虑是否你的程序跟每一个潜在设备兼容。因为Android的运行在一个宽广的设备环境中,一些功能并非适用于所有的设备。例如,一些设备可能不包含指南针传感器。如果你的程序主要的功能就是要求一个指南针传感器,那么你的程序只能兼容包含指南针传感器的设备。

为设备控制你程序的可用性

Android支持多种功能,你可以通过平台的APIs利用这些功能。一些功能是基于硬件的(例如一个指南针传感器),一些功能是基于软件的(例如程序的小部件),还有一些事依赖于平台的版本。一个设备不可能支持所有的特点,因此你可能要根据程序的功能控制程序的可用性。

你的程序要获得最大潜在用户群,你可能要努力用一个单一的APK尽可能多的支持更多的设备。在大多数情况下,在运行时,你可以禁止可选功能并且为不同的配置提供不同的资源(例如为不同的屏幕尺寸提供不能的布局)。如果必要,那么,你可以通过谷歌商店约束你的程序的使用设备基于以下设备特征:
  • 设备功能
  • 平台版本
  • 屏幕配置
设备功能特点
为了方便你管理适用程序的设备功能,Android定义了可能并不适用所有设备的任何一种硬件或者软件的功能id。举个例子,指南针传感器的功能ID是FEATRUE_SENSOR_COMPASS,程序小窗口的ID是FEATURE_APP_WIDGETS。

如果必要的,当用户的设备不提供你的程序清单文件所声明的<users-feature>时,你可以阻止用户安装你的程序。

例如,当一个设备没有指南针传感器时就不能安装你的程序,你可以声明一个指南针功能在一下的清单标签中:
<manifest ... >
    <uses-feature android:name="android.hardware.sensor.compass"
                  android:required="true" />
    ...
</manifest>

谷歌商店对比程序的功能和每一用户设备的可用功能来确定你的程序是否都兼容每一个设备。如果一个设备不提供你的程序要求所有的功能,用户将不能安装。

然而,如果你的程序主要的功能并不要求设备的功能,你能设置这些属性是“false”并且在运行时检查设备功能。如果程序的功能不适用于当前的设备,适度降低程序的功能。举例,你能够查询功能是否可用用hasSystemFeature()如下:
PackageManager pm = getPackageManager();
if (!pm.hasSystemFeature(PackageManager.FEATURE_SENSOR_COMPASS)) {
    // This device does not have a compass, turn off the compass feature
    disableCompassFeature();
}

关于所有的过滤器的信息,通过谷歌商店,你能控制程序的可用性,看谷歌商店文档的过滤器。

内容:一些系统权限是隐式要求一个设备的功能适用性。例如,如果你的程序要求访问蓝牙,这个是隐式要求设备功能。你能基于这个特点阻止过滤器并且通过设置<uses-feature>d的蓝牙属性为“false”让你的程序适用于没有蓝牙的设备。关于更多设备功能的隐式要求,请读隐含功能权限。
平台版本

不同的设备可能安装着不同的Android版本,例如,Android4.0或Android4.4,。每个连续的平台版本常常添加新的API并且不适用与前一个版本。为了表明这组API可供选择,每个版本都要指定一个API等级。例如,Android1.0是Android等级1并且Android4.4是等级19.


这个API等级允许你声明最小的版本来兼容你的程序,用<users-sdk>这个标签的minSdkVersion属性表现。


举例,android4.0提供了日历功能,如果你的程序需要这个功能的api,你可以声明程序的最小支持版本是Android等级14。

<manifest ... >
    <uses-sdk android:minSdkVersion="14" android:targetSdkVersion="19" />
    ...
</manifest>

这个minSdkVersion的属性声明你的程序兼容的最小版本并且targetSdkVersion属性声明程序兼容的最高版本。


Android的每个新版本的兼容性都是建立在前北奔的基础上,因此使用Android文档总是能够一直兼容未来的版本。


内容:这个targetSdkVersion属性不能阻止程序被安装在高于targetSdkVersion的指定值的设备上,但是targetSdkVersion是非常重要的因为它表明给系统的应用程序是否应该继承在新版本的行为更改。跑在最新的版本上系统会假设你的程序兼容老版本当你没有更新targetSdkVersion这个属性的时候。举例,其中在android4.4的行为改变中,警报生成是默认不准确的,因此系统可以分批处理警报并且保护电池的电量,但是如果你的目标API的等级低于19时系统将保留以前API行为。


然而,如果你的程序使用最新的平台版本添加APIs,但是不能要求它们用于主要的功能,你能在运行时检查API的等级并且在API太落后的情况下适度降低相应的功能。在这种情况下,设置minSdkVersion这个最低值可能是你的程序的主要特点,SDK_INT当前的版本和Build.VERSION_CODES你想要检查的版本对比。例如:

if (Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB) {
    // Running on something older than API level 11, so disable
    // the drag/drop features that use ClipboardManager APIs
    disableDragAndDrop();
}

屏幕配置
Android运行在各个尺寸的设备上,这些设备包括手机和电视。根据设备的屏幕类型分类,Android为每个设备定义了两个特征:屏幕尺寸(屏幕物理尺寸)和屏幕密度(屏幕的像素的物理密度,叫做DPI)。为简化不同的配置,Android归纳了几个目标组:

  • 四种尺寸:small(小)、normal(默认)、large(大)、xlarge(超大)。
  • 几个密度:mdpi (中等), hdpi (高精度), xhdpi (超高精度), xxhdpi (比超高精度还高),和其他的。
默认情况下,程序兼容所有的屏幕尺寸和密度,因为系统会为每一个屏幕自动调整你的布局和资源图片。然而,你为不同的屏幕指定布局并且根据屏幕密度选择位图,优化用户的体验。

想知道更多关于如何为不同的屏幕创建不同的资源和在必要时如何约束某些屏幕尺寸,请阅读Supporting Different Screens。

控制你的程序适用性用于商业原因

除了屏幕的密度约束程序的适用性,可能在法律或者商业的原因下也需要约束程序的适用性。举例,一个显示伦敦地铁时刻表的程序只会被英国人民喜欢。在这种情况下,谷歌商店提供开发者控制台,让你可以控制你的程序的可用性对于非技术原因,例如用户的区域和无线运营商的过滤选项。

过滤技术兼容(例如所需的硬件组件)一直基于程序包含的API文件。但是过滤一个非技术的原因(例如区域)一直是谷歌商店开发者的控制台来处理。

下面图片选中这个单词 Google无结果,是不是应该是
compatibility

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值