1.2 Device Compatibility

DeviceCompatibility

       Android被设计为可以在各种不同类型的设备上运行,包括手机,平板电脑和电视。为了让你的app在所有的设备上成功运行,android系统应该可以容忍某些特征变化,提供一个灵活的用户界面以适应不同的屏幕配置。

       Android提供一个动态的app框架,这样你可以在静态文件中提供app资源的特征性配置。(例如针对不同屏幕尺寸定义不同的xml布局)android可以根据当前设备的配置加载相应的资源。所以如果你的app具有一定的前瞻性设计,也具有额外的app资源,你可以单独建立一个apk对不同设备的用户都提供最佳的用户体验。

       在有必要的情况下,你可以指定你的app特定要求同时控制那些类型的设备可以从Google Play商店中下载安装你的应用。这一章就解释你如何控制那些类型的设备可以访问你的app,以及如何确保你的app呈现在正确的观众面前。

 

What Does “Compatibility” Mean?

       因为android是一个开源的项目,任何硬件制造商都可以生产出运行android操作系统的设备。当一个设备可以正确运行为安卓系统编写的app时,这个设备就可以称为是“android兼容性”(Androidcompatible)的。Androidcompatibility program(android兼容性程序)会为android执行环境声明精确的细节,另外每个设备都必须通过兼容性测试套件(CompatibilityTest Suite, CTS)来确保他们是android兼容性的。

       作为开发者,你不需要担心设备的android兼容性的问题,因为只有android兼容性的设备才会装载GooglePlay Store。所以只要是从Google PlayStore上下载安装你开发的app的设备就一定是android系统兼容的。

       然而,你需要考虑的是你的app是否兼容每一个设备的潜在配置。因为android可以运行在大量不同配置的设备上,一些功能并不在所有的设备上可用。例如,一些设备并没有装载罗盘传感器(CompassSensor)。如果你的app核心功能需要使用罗盘传感器,那么你的app只能兼容装有罗盘传感器的设备。

 

Controlling Your App’s Availability to Device

       Android支持各种手机功能,你的app可以通过API平台来控制它们。一些功能是基于硬件的(例如罗盘传感器),一些功能则是基于软件的(例如窗口小部件/widget),还有一些是基于平台版本(platform version)。并不是每个设备都支持所有的功能,所以基于你的app要求的特性,你必须控制你的app在设备上的可行性。

       为了给你的app获得最大量的忠实用户,你应该用一个apk支持尽可能多的设备配置。在大多数情况下,为了实现上述目的,你可以在运行期间禁用可选项,为不同配置的设备提供可选的app资源(例如不同屏幕大小的设备使用不同的布局)。在需要的情况下,你可以基于下面的设备特征利用GooglePlay Store限制你的app在一些设备的可行性:

Devicefeature/Platform version/Screen configuration

 

Device Feature

       为了让你管理你的app基于设备配置的可行性,android对任何硬件或软件功能都声明了featureID。例如罗盘传感器的feature ID就是FEATURE_SENSOR_COMPASS而app小窗口控件的featureID是FEATURE_APP_WIDGETS。

       在manifest.xml文件中,你可以用<uses-feature>标签声明你的app需要的功能,如果设备不具备你声明的这种功能,则你的app会被阻止安装在这台设备上。

       例如,你可以如下声明你的app需要罗盘传感器:

<manifest…..>

       <uses-feature android: name=”android.hardware.sensor.cpmpass”

android: required=”true” />

       …….

</manifest>

 

GooglePlay Store会比较你的app需要的配置和每个设备上的配置,判断你的app是否兼容每一个设备。如果设备没有提供你的app需要的配置,用户则不能从Google Play Store上下载安装你的app。

       然而,如果你的app的基本功能并不包含这个设备配置,你可以设置required选项为false,然后在app运行期间检查这个配置。如果app功能在当前设备上不可用,可以温和的降低app相应的功能。例如,你可以用hasSystemFeature()方法检查一个功能是否可用:

PackageManagerpm=getPackageManager ();

if(! pm.hasSystemFeature (PackageManager.FEATURE_SENSOR_COMPASS)){

       //This device does not have a compass,turn off the compass feature

       disableCompassFeature ();

}

你可以使用过滤器(filter)通过GooglePlay Store为用户控制app的可用性,所有的filter信息可以参见Filterson Google Play文档。

 

Platform Version

       不同的设备可能运行的是不同的android平台,每个连续的平台通常都添加了在前一个平台中不可用的新的API。为了明确哪一套API是可用的,每一个平台都指定一个APIlevel(API级别)。例如,Android1.0就是API级别1,Android4.4就是API级别19.

       API级别允许你指定你的app兼容的最低版本,使用<uses-sdk>清单标签和minSdkVersion属性。

       例如,CalendarProvider API是在Android4(APIlevel 14)中添加进来的,如果你的app不能没有这些API,你必须将APIlevel14 作为你的app最低支持版本。

<manifest…..>

       <uses-sdk android: minSdkVersion=”14” android: targetSdkVersion=”19”/>

</manifest>

minSdkVersion标签描述的是你的app兼容的最低版本,targetSdkVersion标签描述的是你的app的最优化的版本。

       每一个连续性的android版本都会为你的app提供对前一个android版本的兼容,所以你的app也会对未来的android平台兼容。

 

Note:targetSdkVersion标签不会阻止你的app安装在比这个标签描述的更高版本的android平台上,它很重要是因为它向系统指出你的app应该继承新版本的行为变化。如果你没有将targetSdkVersion升级到最新的版本,则你的app在最新的android平台上运行的时候,系统会假设你的app需要一些向后兼容(Backward-compatibility)。
(For example, among the behavior changes inAndroid4.4,alarms created with the AlarmManager APIs are now inexact by defaultso the system can batch app alarms and preserve system power.)

例如,在android4.4的行为变化中,用AlarmManager这个API默认创建的警报(Alarm)现在并非是精确的,所以系统可以批量处理app的警报同时保护系统功率。但是系统仍然会为你的app保留先前的API,如果你的targetAPI水平比19低的话,你的app仍然可以正常使用。

 

       然而,如果你的app使用的API添加到了更近的一个android平台上,且不需要这些API作为app的主要功能,你可以在运行期间检查API的水平,如果API的水平很低,你可以适当的降低app的相关功能。在保证你的app主要功能的前提下,将minSdkVersion设置为最低版本,然后比较当前系统版本——SDK_INT和在Build.VERSION_CODES中的版本名字,可以对你想要检查的API水平做出响应。例如:

If(Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB) {

       //Running on something older than APIlevel 11, so disable

       //the drag/drop features that useClipboardMnager APIs

       disableDragAndDrop ();

}

 

Screen configuration

       为了从屏幕类型来区分设备,android为每个设备都声明了两种类型:屏幕尺寸(屏幕的物理大小)和屏幕密度(屏幕上像素的物理密度,thephysical density of the pixels on the screen, DPI)。为了简单区分这些配置,android将他们如下分组:

四种广义的尺寸:small, normal, large, xlarge

几种广义的密度(density):mdpi(medium),hdpi, xhdpi(extra high),xxhdpi(extra-extra high)等

       默认情况下,你的app兼容所有的屏幕尺寸和密度,因为系统能够针对每一个屏幕适当的调整你的UI布局和图像资源。然而,你可以针对不同的屏幕尺寸增加不同的布局,根据屏幕密度调整图像资源,从而优化用户体验。更多的细节可以参照SupportDifferent Screens.

 

Controlling Your App’s Availability for BusinessReason

        除了根据设备特点限制你的app可用性以外,你可能会因为商业原因或者法律原因限制你的app的有效性。例如,一个显示伦敦地铁的列车时刻表的app不太可能被伦敦以外的用户使用到。对于这种情况,Google PlayStore提供了由开发者控制的选择过滤器。通过这个过滤器,你可以根据非技术原因例如用户的地域或者用户的无线运营商来控制你的app的可用性。

       技术兼容性的过滤器(例如需要某个硬件配置)需要的信息总是被包含在你的APK文件中。而非技术性过滤器(例如用户的地理位置)则由Google PlayStore developer console来控制。

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
毕业设计,基于SpringBoot+Vue+MySQL开发的公寓报修管理系统,源码+数据库+毕业论文+视频演示 现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本公寓报修管理系统就是在这样的大环境下诞生,其可以帮助管理者在短时间内处理完毕庞大的数据信息,使用这种软件工具可以帮助管理人员提高事务处理效率,达到事半功倍的效果。此公寓报修管理系统利用当下成熟完善的Spring Boot框架,使用跨平台的可开发大型商业网站的Java语言,以及最受欢迎的RDBMS应用软件之一的MySQL数据库进行程序开发。公寓报修管理系统有管理员,住户,维修人员。管理员可以管理住户信息和维修人员信息,可以审核维修人员的请假信息,住户可以申请维修,可以对维修结果评价,维修人员负责住户提交的维修信息,也可以请假。公寓报修管理系统的开发根据操作人员需要设计的界面简洁美观,在功能模块布局上跟同类型网站保持一致,程序在实现基本要求功能时,也为数据信息面临的安全问题提供了一些实用的解决方案。可以说该程序在帮助管理者高效率地处理工作事务的同时,也实现了数据信息的整体化,规范化与自动化。 关键词:公寓报修管理系统;Spring Boot框架;MySQL;自动化;VUE
毕业设计,基于SpringBoot+Vue+MySQL开发的社区医院管理系统,源码+数据库+毕业论文+视频演示 信息数据从传统到当代,是一直在变革当中,突如其来的互联网让传统的信息管理看到了革命性的曙光,因为传统信息管理从时效性,还是安全性,还是可操作性等各个方面来讲,遇到了互联网时代才发现能补上自古以来的短板,有效的提升管理的效率和业务水平。传统的管理模式,时间越久管理的内容越多,也需要更多的人来对数据进行整理,并且数据的汇总查询方面效率也是极其的低下,并且数据安全方面永远不会保证安全性能。结合数据内容管理的种种缺点,在互联网时代都可以得到有效的补充。结合先进的互联网技术,开发符合需求的软件,让数据内容管理不管是从录入的及时性,查看的及时性还是汇总分析的及时性,都能让正确率达到最高,管理更加的科学和便捷。本次开发的社区医院管理系统实现了病例信息、字典表、家庭医生、健康档案、就诊信息、前台、药品、用户、用户、用户表等功能。系统用到了关系型数据库中王者MySql作为系统的数据库,有效的对数据进行安全的存储,有效的备份,对数据可靠性方面得到了保证。并且程序也具备程序需求的所有功能,使得操作性还是安全性都大大提高,让社区医院管理系统更能从理念走到现实,确确实实的让人们提升信息处理效率。 关键字:社区医院管理系统;信息管理,时效性,安全性,MySql
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值