设备兼容性

设备兼容性

Android的设计是为了运行多种不同类型的设备,从手机到平板电脑和电视。作为一名开发人员,设备的范围为你的应用提供了巨大的潜在受众,为了让你的应用在所有这些设备上取得成功,它应该能够容忍一些特性的可变性,并提供一个灵活的用户界面,以适应不同的屏幕配置。

兼容性包括设备兼容性和应用兼容性。但是作为应用开发我们只需要考虑应用兼容性。但是,您需要考虑您的应用程序是否与每个潜在的设备配置兼容。因为android系统运行在不同的设备上,并且android系统拥有不同的版本,你的应用需要根据自己的需要进行相关选择。比如:你的应用核心部件需要传感器的支持,那你的应用就需要对设备进行选择,选择那些带有传感器的设备。

控制应用在设备上的可用性

应用在android系统上可以通过API对系统的一些特性进行调用,这些特性包括设备特性(传感器)、软件特性(应用小部件)以及依赖于系统版本。所以,你必须控制你的应用可以在什么android系统和设备上运行。

在大多数情况下,您可以在运行时禁用可选特性,并为不同配置提供可选的应用程序资源(比如:不同的屏幕大小对应于不同的布局文件)。如果有必要,也可以通过以下三种设备特性来对应用在设备上的可用性进行约束。

1、设备特性;

2、系统版本;

3、屏幕适配;

设备特性

       基于设备特性管理应用在设备上的可用性,android定义了一些特性ID来描述一些硬件和软件特性。比如:FEATURE_SENSOR_COMPASS代表罗盘传感器、FEATURE_APP_WIDGETS代表应用小部件。

       应用特性ID的三个不同场景:以在manifest file的<uses-feature>中定义对设备特性的要求,让不具备该特性的设备不能安装此APP应用。比如:

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

二、应用主要功能需要某种设备特性时,可以在清单文件设置该特性为false或者不需要设置直接默认是false,同时在应用运行在该设备上时,对设备是否具有该特性进行检查,以关闭对该特性有关的功能。比如:

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

三、一些系统权限隐式地需要设备特性,比如需要访问系统的蓝牙权限,FEATURE_BLUETOOTH设备特性是需要的。可以设置这个设备特性为false,让没有蓝牙功能的设备也可以安装此应用。

系统版本

不同的android系统版本,都会有一些新的功能或者是对旧版本系统功能的修改,一个系统版本中包含的API功能通常被称为API Level。例如,Android 1.0是API Level 1而Android 4.4是API Level 19。你可以在配置文件中定义最低支持的API版本。使用清单文件中的minSdkVersion属性。

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

targetSdkVersion属性声明了您对应用程序进行优化的最高版本。但是它不会阻止你的应用安装到更高版本的系统中,但是,如果您的应用程序使用了最近的平台版本中添加的API,但是不需要它们的主要功能,那么您应该在运行时检查API级别,并在API级别过低时降低相应的功能。在这种情况下,将minSdkVersion设置为应用程序的主要功能的最低值,然后将当前系统版本SDK_INT与构建中的codename常量Build.VERSION_CODES进行比较。对应于您想要检查的API级别的版本代码。例如:

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, and xlarge;

和几个广义密度:mdpi (medium), hdpi (hdpi), xhdpi (extra high), xxhdpi (extra-extrahigh)and others;

默认情况下,您的应用程序兼容所有屏幕大小和密度,因为系统对您的UI布局和图像资源进行适当的调整,以满足每个屏幕的需要。但是,您应该为每个屏幕进行配置以优化用户体验,通过为不同的屏幕大小添加专门的布局和针对常见屏幕密度优化的位图图像。

出于商业原因控制你的应用程序的可用性

除了限制你应用程序的可用性之外,你还可能出于商业或法律原因需要限制你的应用的可用性。例如,一款显示伦敦地铁列车时刻表的应用程序不太可能对英国以外的用户有用。在这种情况下,Google Play Store提供了Play控制台中的过滤选项,允许用户以非技术原因来控制应用程序的可用性,比如用户的地区。过滤技术兼容性(如所需的硬件组件)总是基于您的APK文件中包含的信息。但是对于非技术原因(比如地理位置)的过滤总是在Google Play控制台中处理。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值