您现在的位置是:首页 > 正文

android设备兼容解决,设备兼容处理-[Android_YangKe]

2024-04-01 05:35:23阅读 7

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

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

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

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

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

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

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

设备功能处理

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

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

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

android:required="true" />

...

声明应用使用的单一硬件或软件功能。

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

您的应用声明的可用功能集对应于 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 设备功能。 您可以根据此功能禁用过滤,并通过在标记中将所需属性设置为“false”,使您的应用程序可用于无蓝牙设备。

平台版本

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

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

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

...

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

屏幕适配

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

四个尺寸:小、普通、大、超级大

几个密度值:mdpi (medium), hdpi (hdpi), xhdpi (extra high), xxhdpi (extra-extra high),其他。

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

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

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

网站文章

  • apache2.4添加对多版本php的支持

    需求 fedora26下使用yum安装好apache2.4 和 php7.0后,需要添加apache2.4对php5.6的支持. 方法 介绍方法前,需要理解一个文件,libphp5.0.so,当php作为apache的一个模块运行,随apache一起启动时,需要在编译php时生成此文件,并在apache配置文件中修改配置项,加载这个文件. 因此如果想添加多版本支持,只需通过编译生成不同版本...

    2024-04-01 05:35:16
  • docker下运行pycharm无法显示问题

    报错:pycharm-community-2020.3.2/jbr/lib/libjcef.so: libnss3.so: cannot open shared object file: No such file or directory解决方案:sudo apt-get install libxi6 libxtst6 libxrender1

    2024-04-01 05:35:09
  • 最早应用计算机岩土三维模型技术,基于三维地质模型的岩土工程设计与可视分析...

    赵帅权 姚显瑞摘 要:基于三维地质模型的岩土工程数字化的应用,成为我国岩土工程领域的主要发展方向。岩土工程的三维地质建模和可视化分析研究,提高了岩土工程的信息化管理水平,在岩土工程领域具有一定的应...

    2024-04-01 05:35:01
  • Failed to start firewalld.service: Unit is masked

    Failed to start firewalld.service: Unit is masked

    2024-04-01 05:34:20
  • Android面试知识总结

    Android面试知识总结

    2020-08-05:ZK:初 1.AIDL 2.handler 3.A Activity 起 B Activity ,及Back后生命周期。 4.ANR 5.内存泄漏 6.cotentprovide...

    2024-04-01 05:34:08
  • BUUCTF笔记之N1BOOK

    BUUCTF笔记之N1BOOK

    1.[第一章 web入门]常见的搜集robots.txt得到一部分flag:flag1:n1book{info_1备份文件index.php~得到第二部分flag:flag2:s_v3ry_im访问.index.php.swp得到第三部分flag:flag3:p0rtant_hack}

    2024-04-01 05:33:27
  • linux下graphviz安装与使用

    linux下graphviz安装与使用

    用命令行安装软件apt-get install graphvizsudo apt-get install graphviz graphviz-doc这样会安装dot语言的执行文件,执行文件路径在/usr/bin/dot编写dot文件:vim text.dot 例如:digraph G {        hello [shape=box];        worl...

    2024-04-01 05:33:22
  • java Map

    1:HashMap 的数据结构?A:哈希表结构(链表散列:数组+链表)实现,结合数组和链表的优点。当链表长度超过 8 时,链表转换为红黑树。transientNode[]table;2:HashMap...

    2024-04-01 05:33:16
  • 《Flutter 控件大全》第一零二:Wrap

    《Flutter 控件大全》第一零二:Wrap

    如果你对Flutter还有疑问或者技术方面的疑惑,欢迎加入Flutter交流群(微信:laomengit)。 同时也欢迎关注我的Flutter公众号【老孟程序员】,公众号首发Flutter的相关内容。 Flutter地址:http://laomengit.com 里面包含160多个组件的详细用法。 Wrap可以为子控件进行水平或者垂直方向布局,且当空间用完时,Wrap会自动换行,也是常说的...

    2024-04-01 05:32:35
  • io协议服务器,WebSocket协议-Socket.io 客户端API

    客户端APIIO如果使用的是标准化的JS库,则暴露为io这一命名空间;如果是用Node 编译,则使用require('socket.io-client')。引入socket.io的JS库const s...

    2024-04-01 05:32:27