查看原文
其他

检测设备类型,为不同设备用户打造更佳体验

Android Android 开发者 2023-11-14


作者 / Alex Vanyo,开发技术推广工程师


随着 Android 应用在可折叠设备和平板电脑等大屏设备上的使用频率日渐增多,越来越多的应用开始采用完全自适应界面。您可以在官方文档中查阅支持不同的屏幕尺寸,了解更新应用的最佳实践。最重要的是,布局和应用行为应基于设备配置和可用功能,而不是实体设备类型

  • 可折叠设备和平板电脑

    https://android-developers.googleblog.com/2023/06/pixel-fold-and-pixel-tablet-developers-guide.html

  • 支持不同的屏幕尺寸

    https://developer.android.google.cn/guide/topics/large-screens/support-different-screen-sizes


与此同时,我们经常会遇到这样一个问题: "是否可以通过一种简单的方法来判断设备是可折叠设备、平板电脑还是其他设备?"

使用实体设备类型似乎已经可以为开发者提供打造出色体验所需的全部信息。不过,我们可以添加更多背景信息,打造出适应性更强且用户体验更佳的应用。例如: 


  • 您是否希望将 "翻盖" 式手机归为可折叠设备?
  • 您想要确定设备是否为平板电脑,还是只想知道设备是否具备移动数据网络功能?
  • 可卷曲屏幕设备会被归类为哪种设备?ChromeOS 设备呢?其他可运行 Android 应用的桌面设备又该如何归类?

应用开发者之所以想要了解设备类型,最常见的原因就是他们可以通过设备类型来确定采用何种布局展示应用内容。但随着大屏设备越来越广泛地采用分屏和多窗口模式,在某些情况下,根据设备类型确定布局会导致大屏设备的某些场景下布局决策不正确。

为了更好地支持更多设备类型,我们在不断更新自己的应用。在这一过程中,我们发现了一些需要进一步强调的重要用例。我们将介绍四个主要场景: 


  1. 布局 - 针对不同设备和折叠模式显示最合适的界面

  2. 硬件功能 - 实现对各种硬件功能的支持

  3. 向用户显示实体设备类型的名称 - 针对设备类型向终端用户显示个性化的信息。

  4. 设备类型指标跟踪 - 了解用户在不同类型的设备上如何使用您的应用



布局



目标


针对不同的设备、显示模式和折叠模式显示最合适的界面。


建议


借助源自常见设备类型得出的主观划分点,使用窗口大小类别作为指导,根据当前窗口状态做出布局决策。不要限制屏幕方向或尺寸可调整性;否则,用户就无法按照他们希望的方式使用您的应用。


  • 窗口大小类别

    https://developer.android.google.cn/guide/topics/large-screens/support-different-screen-sizes


使用 Jetpack WindowManager 观察折叠功能,Jetpack WindowManager 提供了一系列可与应用当前窗口交互的折叠功能。请注意,即使您的 activity 未接收任何折叠功能,它仍可在支持折叠的设备上运行 - 在外屏上、在内屏的小窗口中或在外部显示器上。

  • 观察折叠功能

    https://developer.android.google.cn/guide/topics/large-screens/make-apps-fold-aware


原因


过去,开发者通常会针对不同的屏幕尺寸创建多种不同的布局,例如 "平板电脑" 布局和 "手机" 布局。这两种布局同时并存,而且必须随着应用的变化而持续更新。当设备制造商大多都仅限于制造 "平板电脑" 和 "手机" 这两个类别设备的时候,将应用的布局称为 "平板电脑" 布局和 "手机" 布局是有用的。但如今,随着制造商生产出物理形态和使用方式都更加多样的设备,用户有了更多的选择。

单个设备有时可能有足够的空间来显示 "平板电脑" 大小的布局,但在另一些情况下 (例如,处于折叠状态的可折叠设备或使用分屏模式时),设备可能只有足够的空间来显示 "手机" 布局。甚至在某些情况下,设备需要更小的布局,例如可折叠翻盖手机的外屏。

这可能是因为可折叠设备具有较小的外屏和较大的内屏。或者,当用户进入多窗口模式并调整自由形式的窗口环境时,也需要更小的布局。关键是,应用布局的类型不应由实体设备类型决定;而应由应用窗口的当前大小决定,该窗口可能在当前设备显示屏上处于全屏或非全屏状态。

在搭载 Android 12L 及更高版本的大屏设备上,当设备发生旋转或折叠,或应用进入多窗口模式时,可以将限制方向或限制调整尺寸的应用置于兼容模式。兼容模式会在应用周围添加宽屏显示,保留应用的指定限制,但是会错失向用户显示更多有用内容的机会。

  • 兼容模式

    https://developer.android.google.cn/guide/practices/enhanced-letterboxing



硬件功能



目标


实现对各种硬件功能的支持 (例如,如果设备具有 SIM 卡)。


建议


根据某项功能是否可用来做出动态的运行时决策,而不是假设某类设备是否支持某项功能。


如果您的应用具有绝对必需的功能,Google Play 将尊重您的应用清单中所声明的必需 uses-feature。但请注意,任何必需的功能都会减少可安装您应用的设备集,并且添加新的必需功能会阻止以前支持的设备进行更新。


  • uses-feature

    https://developer.android.google.cn/guide/topics/manifest/uses-feature-element#market-feature-filtering


原因


许多硬件功能仅出现在一部分 Android 设备上,而在其他设备上则不存在。随着设备的不断发展,我们已经看到了许多面向用户的功能不受支持的情况,因为开发者会假定某种实体设备类型不支持特定的硬件功能。


例如,在一些情况下,支持生物识别身份验证的平板电脑并未提供生物识别身份验证作为登录选项,即使同一应用在手机上支持生物识别身份验证。如果设备支持生物识别身份验证,生物识别身份验证就应当成为用户的一个可用选项,而不是取决于设备的类型。


另一个例子是假设移动数据网络连接仅限于标准尺寸的手机。可折叠设备可能具有 "平板电脑" 大小的屏幕,但仍然具有移动数据网络连接和电话号码。如果设备具有该功能,则用户应当能够相应地选择使用该设备。


一些硬件功能也是动态可用的。用户可以连接或断开外围设备,而应用则应当妥善处理好获得和失去这些功能的访问权限。摄像头和麦克风等硬件功能一次只能由一个应用使用,因此不同应用之间的多任务处理也可能会导致无法访问硬件功能。



向用户显示实体设备类型



目标


根据设备类型向用户显示个性化的信息 (例如 "在平板电脑上运行")。

建议


在界面中将用户的设备简单地统称为 "设备" 可以涵盖所有外形规格,是最容易实现的方式。然而,区分用户可能拥有的多个设备可以提供更加完善的体验,并且让您能够使用与您特定用例相关的启发法向用户显示设备类型。

例如,Google Play 目前使用以下启发法来确定在特定设备上安装应用时向用户显示的设备名称。该逻辑只针对此特定用例,并且可能会随着设备和外形规格的发展而发生变化。
△ 截至 2023 年 6 月的 Google Play 设备显示名称逻辑

原因


如果您要向用户显示设备类型,并且希望区分实体设备类型以打造个性化体验,例如提示 "在您的可折叠设备上下载" 或显示更具体的设备图像,您可以使用可用的物理特征作为启发来确定用户使用的设备类型。然而,这些仅是启发法,可能会随着设备本身引用术语的变化而发生变化。如上所述,可折叠设备可能支持或不支持其他硬件功能,或具有较大的屏幕。

"可折叠设备" 启发法: 


如果某设备具有合页传感器 (可以通过 PackageManager.hasSystemFeature(PackageManager.FEATURE_SENSOR_HINGE_ANGLE) 确定),则该设备支持某种方式的折叠。注意: 虽然这适用于未来的大多数可折叠设备,但可能不适用于一些未公开是否具有合页传感器的旧款可折叠设备。此外,应用所显示的屏幕可能可折叠,也可能不可折叠,设备可能还具有一个额外的非折叠屏幕,或者可折叠屏幕当前处于未折叠状态。三星 Flip 等设备的最小宽度小于 600dp,大屏可折叠设备的内屏最小宽度为 600dp 或更高。


  • PackageManager.hasSystemFeature(PackageManager.FEATURE_SENSOR_HINGE_ANGLE)
    https://developer.android.google.cn/reference/android/content/pm/PackageManager#hasSystemFeature%28java.lang.String%29


"手机" 启发法: 

99.96% 的手机在纵向时,其内屏宽度小于 600dp,但平板电脑或桌面设备上使用自由模式/分屏窗口时也可能会出现这样的屏幕尺寸。


"桌面设备" 启发法: 


运行 Android 应用的桌面设备 (例如 ChromeOS 设备) 可能会公开应用可以使用的特定功能或环境信息。例如,ChromeOS 具有系统功能 "org.chromium.arc" 或 "org.chromium.arc.device_management",以便开发者确定其应用是否在 ChromeOS 上运行。但是,在平板电脑和手机上运行的应用也可以使用桌面级键盘和鼠标来提高工作效率 (如果用户这样选择的话)。


设备类型指标跟踪



目标


了解用户在不同类型的设备上如何使用您的应用。


建议


使用上面讨论的启发法和功能作为分析的输入源,同时请记住实体设备类型并不能全面反映用户在该设备上使用应用的情况。

原因


即使用户使用的是可物理折叠的设备,他们也可能会在多种配置下使用应用。与外屏相比,用户可能或多或少地在内屏上使用应用,并且可能会在内屏上使用多任务处理模式,即同时使用其他应用。对于支持外接显示器的设备,应用可能不会在可折叠设备的任何一个内置物理显示屏上运行。


其他可能相关的信息: 


  • 是否正在使用外设与应用进行交互,例如键盘、鼠标、触控板或触控笔?
  • 该设备是否具有内置触摸屏?
  • 应用是否在自由模式的窗口环境中使用?



总结



不要假设某个特定实体设备对您的应用意味着什么。"设备是否可折叠?"是一个很好的起点,但不应是您的唯一考量。更多的补充信息将为您的当前用例提供更精确、更相关的答案,并且每个用例都有不同的注意事项,建议您在构建功能多样的自适应应用时做出具体的考量。欢迎您持续关注 "Android 开发者" 微信公众号,及时了解更多开发技术和产品更新等资讯动态。




推荐阅读

如页面未加载,请刷新重试

 点击屏末 | 阅读原文 | 即刻了解针对大屏设备的优化指南




继续滑动看下一个

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存