【问题标题】:How to read the real native physical display resolution on Android TV?如何在 Android TV 上读取真实的原生物理显示分辨率?
【发布时间】:2021-06-08 09:01:02
【问题描述】:

我正在尝试在我的 Android TV 设备上读取真实的物理显示分辨率。我有两台测试电视:

  • 全高清,分辨率为 1920 x 1080
  • 超高清,分辨率为 3840 x 2160

和 1 个搭载 Android 9 的 Android TV HDMI 棒。

我想根据电视设备读出真实的物理屏幕分辨率。为此,我尝试以两种方式读出 displayMetrics:

  1. 尝试:

     context.resources.displayMetrics
    
  2. 尝试:

      val displayMetrics = DisplayMetrics()
      activity.display?.getRealMetrics(displayMetrics)
    

不幸的是,我的 UHD 设备在上述两次尝试中都显示为 1920x1080。我对某些按比例缩小的显示分辨率不感兴趣。

编辑:正如@IanGClifton 回答的那样,我用DisplayCompat 进行了尝试。我有一个在 Andorid 9 上运行的 AndroidTV“Stick”,它通过 HDMI 插入任何电视(插入上述 3840x2160 像素的 UHD 电视)设备。我闪动摇杆,physicalWidthphysicalHeight 仍然告诉我 1920x1080 像素。

val defaultDisplay = activity.windowManager.defaultDisplay
val mode = DisplayCompat.getMode(context, defaultDisplay!!)
Log.d(TAG, "Resolution ${mode.physicalWidth} x ${mode.physicaHeigth}.")

但是,当我直接刷新 Android TV 设备(不是 Android TV 棒)时,我得到了正确的分辨率。

如何读取任何设备的真实本机物理显示分辨率(以像素为单位)?

【问题讨论】:

  • some scaled down display resolution. 你确定另一个没有放大吗?
  • @blackapps FullHD 显示 1920x1080。超高清电视也显示 1920x1080。那么应该扩大哪一个?!?
  • 当然是 3840 x 2160。
  • @blackapps 这是一款真正的超高清设备,具有 3840x2160 的原生显示。我可以在超高清电视上观看 4K 电影。我猜启动器应用程序在 1920x1080 下运行,这就是我在 UHD 设备上获得 1920x1080 的原因。我不明白你的意思?

标签: android android-tv android-windowmanager android-displaymanager


【解决方案1】:

Android TV 当前将 UI 映射到 1920x1080,然后根据附加的面板进行缩放,因此您不想查看 DisplayMetrics 而是查看 DisplayCompat

使用 DisplayCompat.getSupportedModes() 来获取可以告诉您分辨率的 ModeCompat 对象,但您需要确保您使用的是相对较新的 AndroidX Core 版本,因为核心 1.5.0 中有一个修复程序-beta02 用于一些错误报告 1920x1080 的面板。

【讨论】:

  • 我尝试了 DisplayCompat,但它不起作用。我在 OP 中从 gradle 添加了 androidx lib。好像我没有明确使用核心?
  • getSupportedModes.size 显示 5,但使用 forEach 迭代显示 2 onyl。两者仍然有 1920x1080 。我用过 androidx.core:core:1.6.0-beta02
  • DisplayCompat 适用于 Android TV 设备,但不适用于 Android TV 棒(如 fireTV 棒)
  • DisplayCompat.getSupportedModes() 返回一个数组,因此 forEach 应该以与 size 属性完全相同的次数对其进行迭代。我必须查看代码才能猜测您为什么会看到这种行为。您应该可以使用DisplayCompat.getSupportedModes(context, display).any { it.physicalWidth >= 3840 && it.physicalHeight >= 2160 } 来验证屏幕是否至少为 4k。也就是说,我只在 Android TV 上使用过它。如果您现在谈论的是不运行 Android TV 的 FireTV Stick,我不知道它是否以相同的方式报告尺寸。
  • 对不起,它不是 FireTv Stick。这是一根类似的棍子,但那根棍子上肯定运行的是 Android API 28 = 9。
猜你喜欢
  • 2021-12-21
  • 1970-01-01
  • 2016-06-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-27
  • 1970-01-01
相关资源
最近更新 更多