设备兼容处理-[Android_YangKe]

最好的学习资料

Android 的设计是让所有应用程序可以运行在不同类型设备上。主要设备有:手机、平板、电视。作为一个开发者,适配的范围为应用程序提供了一个巨大的潜在用户,为了我们的产品可以成功在所有设备上进行使用,我们应该容忍一些特性变化,并提供一个灵活的用户界面,使之能够适应不同的屏幕配置。

为了努力达到这一目标,Android 为我们提供了一个 App Framework app resources,(资源是动态加载的)我们可以为不同的屏幕提供不同的 UI 布局,以适在当前设备上可以近完美的展示我们应用的功能。

如果有必要,我们可以控制我们的应用可以在什么样的设备上运行,这里主要解释了我们可以控制哪些设备访问您的应用程序,以及如何准备您的应用程序,以确保他们在不同的设备上达到如期的设计。

首先看一下兼容性主要指什么?

当你阅读很多关于 Android 开发的资料时,你很可能会遇到“compatibility”(兼容性)这个词。兼容性有两种类型:设备兼容性和应用程序兼容性。

设备兼容性:Android 是一个开源的操作系统,国内很多手机制造厂商用的都是 Android 系统。因此国内出现了很多不同类型的设备(主要指移动设备)例如一些手机是否具备NFC、闪光灯、陀螺仪、GPS等硬件。总结:**乱、砸、大小不一 **。

应用程序兼容性:基于硬件让我们的产品展现出更好的用户体验。如:一些手机不具备 GPS 硬件,一个基于此硬件的应用程序,可能在不同的手机设备里展现的功能不大一样,对于不具备这样硬件的设备我们可以给出友好的提示或者屏蔽此功能。

设备功能处理

根据设备特性管理你应用程序的可用性,Android 定义特性 id 对于任何硬件或软件功能,可能不是所有设备上可用。例如:罗盘传感器的特性 id FEATURE_SENSOR_COMPASS 和FEATURE_APP_WIDGETS 窗口小部件的特性 id。

如果有必要,你可以防止用户安装您的应用时设备不提供一个给定的功能通过声明它<uses-feature>元素的应用程序清单文件。

例如,如果您的应用程序在设备上没有意义,缺乏一个罗盘传感器,可以声明罗盘传感器与下列清单标签要求:

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

<uses-feature>
声明应用使用的单一硬件或软件功能。

用途是将您的应用依赖的硬件和软件功能集通知任何外部实体。 该元素提供的 required 属性可让您指定您的应用是需要声明的功能并且没有该功能便无法正常工作,还是使用该功能只是一种优先选择,没有它仍然可以正常工作。 由于功能支持可能因 Android 设备而异,<uses-feature>元素发挥的重要作用是,能够让应用描述其使用的随设备而变化的功能。
您的应用声明的可用功能集对应于 Android PackageManager
提供的功能常量集,

在谷歌应用商店中,商店会比较你的应用的特性,检查每个用户的设备的特性确定应用程序是否与每个设备兼容。如果设备不提供您的应用程序需要的所有功能,用户则不能安装您的应用。同理国内的主流应用市场应该也是这样的,未做实践。

如果你应用程序的主要功能在某些设备上不存在所对应的硬件,你应该将必要的属性设置为“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();
}

注意:某些系统权限隐含地要求设备功能的可用性。 例如,如果您的应用程序请求访问 BLUETOOTH 的权限,则会隐式地需要 FEATURE_BLUETOOTH 设备功能。 您可以根据此功能禁用过滤,并通过在<uses-feature>标记中将所需属性设置为“false”,使您的应用程序可用于无蓝牙设备。

平台版本

不同的设备运行着不同的 Android 版本,例如 Android 4.0 或 Android 4.4。 每个连续的平台版本通常会添加新的 API,而不是以前的版本。 要指出哪些 API 可用,每个平台版本都指定一个 API 级别。 例如,Android 1.0 是 API 级别 1,Android 4.4 是 API 级别 19。

API 级别允许您使用<uses-sdk>清单标签及其 minSdkVersion 属性来声明应用程序兼容的最低版本。

例如,日历提供程序 API 已在 Android 4.0(API级别14)中添加。 如果您的应用程序在没有这些API的情况下无法运行,则应将 API 级别 14 声明为应用程序的最低支持版本,如下所示:

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

minSdkVersion 属性声明您的应用程序兼容的最低版本,targetSdkVersion 属性声明您已经优化了应用程序的最高版本。

屏幕适配

Android在各种尺寸的设备上运行,从手机到平板电脑和电视。 为了按照屏幕类型对设备进行分类,Android 为每个设备定义了两个特征:屏幕尺寸(屏幕的物理尺寸)和屏幕密度(屏幕上像素的物理密度,称为DPI)。 为了简化不同的配置,Android将这些变体概括为使它们更容易定位的组

  • 四个尺寸:小、普通、大、超级大
  • 几个密度值:mdpi (medium), hdpi (hdpi), xhdpi (extra high), xxhdpi (extra-extra high),其他。

默认情况下您的设备兼容所有设备的尺寸和密度,因为系统会适当的调整 UI 布局和加载响应 res 文件,同时,您应该为不同的屏幕尺寸添加专门的布局,并为通用的屏幕密度优化位图图像,优化每个屏幕配置的用户体验。

适配不同设备屏幕 Supporting Different Screens.

再坚持一下,再努力一下,再前进一下,也许,设备兼容离你只有一步之遥。有句话说,哪怕只有百分之一的希望,我也要付出百分之百的努力。学习不能停!!

ps: 有帮助的话: 喜欢、评论、转发,动一动你的小手让更多的人知道!关注 帅比-杨

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 227,572评论 6 531
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 98,071评论 3 414
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 175,409评论 0 373
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 62,569评论 1 307
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 71,360评论 6 404
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 54,895评论 1 321
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 42,979评论 3 440
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 42,123评论 0 286
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 48,643评论 1 333
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 40,559评论 3 354
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 42,742评论 1 369
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 38,250评论 5 356
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 43,981评论 3 346
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 34,363评论 0 25
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 35,622评论 1 280
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 51,354评论 3 390
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 47,707评论 2 370

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 172,593评论 25 707
  • 有的时候自己对自己的性格都是无奈的,但是我也清楚人都是有劣根性的,比如自私,比如懒惰。那些自己都无法勉强的,又...
    山木兮北阅读 343评论 0 0
  • 一周又过去了。这个周进展不大。 工作方面:业务指标确定,方向和途径确定,梳理了工作重点,做完了考勤。关于Excel...
    千尘阅读 183评论 0 0
  • 冰冷的夜啊 狂风肆虐 吹落一地积雪 平静的心哟 波澜涌现 似梦似真似幻 窗外的月啊 你可知道 寂寞人儿凝噎 大美草...
    007008阅读 295评论 4 3
  • 近朱者赤,近墨者黑 在生活中,会有这样的人,夫妻感情非常好,孩子聪慧,优秀,对父母孝顺,在我眼里完全是人生赢家。 ...
    大麦茶的故事阅读 211评论 0 0