1

我正在尝试在我的 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 电视)设备。我闪动 Stick 并且physicalWidth仍然physicalHeight告诉我 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 棒)时,我得到了正确的分辨率。

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

4

1 回答 1

0

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

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

于 2021-06-10T19:07:03.350 回答