Android官方API Guide学习之二 设备兼容性

Android设备种类繁多,包含手机、平板、电视等。因此开发者在开发app的时候需要考虑到设备兼容性,使应用程序能够在各式各样的设备上正确运行。
何谓兼容性
兼容性包含两个方面:设备兼容性和应用程序兼容性,二者分别从设备和应用的角度来谈兼容性。

  • 一个设备称为“Android兼容”,是指它能够正确运行为Android运行环境编写的应用呈现。一个Android设备,需要通过Compatibility
    Test Suite (CTS,兼容性测试套件)的兼容性测试,确保其设备兼容性。

    作为Android开发人员,无需考虑设备兼容性,只需要考虑应用程序的兼容性。

  • 面对如此多的Android设备,如何保证你的应用程序能够正确运行在每一个安装该app的设备上,是应用程序兼容性的问题。

通常,开发者主要从以下几个方面考虑Android的兼容性问题。

设备特性
为了方便开发者管理自己基于某些Android的设备特性(device features)所开发的app的可用性,Android为无法在所有设备上可用的特性定义了features ID,无论是软件上的还是硬件上的特性。例如,指南针传感器的feature ID是FEATURE_SENSOR_COMPASS而app组件的feature ID是FEATURE_APP_WIDGETS
为了防止用户将app安装在不具备其所需特性的设备上,开发者可以在manifest文件中通过定义<users-feature>标签来声明。
例如,如果需要上述的指南针功能,则可以在manifest文件中进行如下定义:

<manifest ... >
    <uses-feature android:name="android.hardware.sensor.compass"
                  android:required="true" />
    ...
</manifest>

这段代码表明,该app需要指南针传感器,那么如果一个设备不具有它,则无法安装该app。
除了在manifest文件中定义android:required="true"外,如果一个特性并非app中非常重要的功能,那么可以将上述的”true”改为”false”,而是在app运行时进行检查,当该设备不具有该特性时,则适当降低app的功能,保证app正确运行。例如,我们可以通过调用hasSystemFeature()方法来判断设备是否具有某一个特性。

PackageManager pm = getPackageManager();
if (!pm.hasSystemFeature(PackageManager.FEATURE_SENSOR_COMPASS)) {
    // This device does not have a compass, turn off the compass feature
    disableCompassFeature();
}

Android平台版本
目前Android平台已经到了6.0版本,不同版本间会有一些功能上的不同,新版本往往会提供一些新的API,如果使用新的API,势必会导致无法在以前的版本上运行。Android将每个API版本进行分级(level),如Android 1.0的版本为level 1,Android4.4版本为level 19.
开发者可以在manifest文件中通过定义<users-sdk>标签来声明该app所适应的level范围,例如:

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

上述代码中android:minSdkVersion="14"表明该app所能运行的最低sdk版本为14,而android:targetSdkVersion="19"表明该app优化到的最高版本。
注意:android:targetSdkVersion并不是app所能安装的最高版本,android的版本是向下兼容的,其表明的是优化版本,因为同样的API接口,新版本可能对老版本上的不足进行了优化,从程序运行来看,它表示调用接口时只会调用该版本实现的API,而不是早期版本的API。
如果你的应用程序调用了最近的API接口,但是主要功能用的还是老版本的API,那么也可以通过在运行时检查设备的API版本,当设备的API版本过低时,适当降低app的功能。这样做可以让你的android:minSdkVersion尽可能的低,使得app能够安装在更做的设备上,示例代码如下:

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();
}

上述代码中:Build.VERSION.SDK_INT是android系统的版本号,Build.VERSION_CODES.HONEYCOMB是应用的版本号。
屏幕配置
Android设备从两方面来定义屏幕,分别为屏幕大小和像素密度。为了简化屏幕的不同配置,Android定义了几种通用的屏幕属性:

  • 四种屏幕大小:small,normal,large,xlarge
  • 五种屏幕密度:mdpi(medium),hdpi(hdpi),xhdpi(extra high),xxhdpi(extra-extra high),others.

具体开发细节,以后进行深入研究。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值