【发布时间】:2011-11-23 13:20:49
【问题描述】:
我需要一种使用 adb 检测设备屏幕尺寸和密度的方法。 如果没有解决方案,我在哪里可以获得所有现有 Android 设备及其屏幕尺寸和密度的完整列表?
【问题讨论】:
-
如果使用Appium,可以使用
Dimension windowSize = driver.manage().window().getSize();。
我需要一种使用 adb 检测设备屏幕尺寸和密度的方法。 如果没有解决方案,我在哪里可以获得所有现有 Android 设备及其屏幕尺寸和密度的完整列表?
【问题讨论】:
Dimension windowSize = driver.manage().window().getSize();。
您也可以通过 ADB 访问 WindowManager:
$ adb shell wm
usage: wm [subcommand] [options]
wm size [reset|WxH]
wm density [reset|DENSITY]
wm overscan [reset|LEFT,TOP,RIGHT,BOTTOM]
获取屏幕分辨率:
$ adb shell wm size
Physical size: 2880x1600
获取屏幕密度:
$ adb shell wm density
Physical density: 320
您还可以通过添加新密度来覆盖密度:
$ adb shell wm density 160
【讨论】:
ANDROID:/ # dumpsys window | grep mGlobalConfiguration
mGlobalConfiguration={1.0 ?mcc?mnc [en_US] ldltr sw720dp w1920dp h532dp 160dpi
所以分辨率是 1920x720
【讨论】:
工作很好:
dumpsys window | grep Display
返回:显示:init=320x480 cur=320x480 app=320x480 rng=320x295-480x455
【讨论】:
dumpsys window displays
显示如下:
Display: mDisplayId=0
init=1080x1920 480dpi cur=1080x1920 app=1080x1920 rng=1080x1005-1920x1845
layoutNeeded=false
另一种方式:
dumpsys display
还展示了一些有趣的东西,例如:
mDefaultViewport=DisplayViewport{valid=true, displayId=0, orientation=0, logicalFrame=Rect(0, 0 - 1080, 1920), physicalFrame=Rect(0, 0 - 1080, 1920), deviceWidth=1080, deviceHeight=1920}
最后但同样重要的是:
dumpsys power
会显示类似的东西
Electron Beam State:
mPrepared=false
mMode=2
mDisplayLayerStack=0
mDisplayWidth=1080
mDisplayHeight=1920
mSurfaceVisible=false
mSurfaceAlpha=0.0
您可以轻松地使用 grep 来获取 mDisplayWidth 和 mDisplayHeight
【讨论】:
要从 ADB 获取所需信息,从命令行执行的以下命令将返回许多有关连接设备的有用属性
> adb shell getprop
通过这些属性进行过滤
在 Unix 上使用 grep 之类的
> adb shell getprop | grep density
在 Windows 上使用 find like
> adb shell getprop | findstr "density"
返回值看起来像
[ro.sf.lcd_density]: [240]
屏幕尺寸放显示而不是密度
【讨论】:
LCD 密度在 build.prop 中:
adb shell getprop ro.sf.lcd_density
并且分辨率在输入活动的dumpsys中可用:
# windows
adb shell dumpsys window | find "DisplayWidth"
# linux
adb shell dumpsys window | grep DisplayWidth
它适用于我测试过的所有设备(2.2、2.3.3、2.3.4、4.0.3;Acer Liquid E、HTC Wildfire S、HTC Incredible S、Motorola Atrix 4G、Samsung Galaxy Note、Samsung Galaxy Nexus),以及模拟器,虽然模拟器的输出太干净了,不能作为解析的好例子。
【讨论】:
getevent -p 获得事件处理程序的有效输入坐标的最小/最大范围。这与某些触摸输入设备位于边框下方的情况相关,因此可用最小值实际上从大于 0 的某个值开始。
查看 adb shell dumpsys 的输出。屏幕尺寸多次显示在那里,以及许多其他信息。
...虽然现在我在办公室,但它可以在我的手机上运行,但它在 Galaxy 平板电脑上却没有。该死。
【讨论】:
如果您需要使用它Screen Sizes and Densities Click here获取市场上可用的Android设备范围的当前状态
此数据基于截至数据收集日期的 7 天内访问 Android 电子市场的 Android 设备数量
【讨论】:
您可以使用以下代码获取屏幕尺寸:
public int getScreenHeight() {
return getDisplay().getHeight();
}
private Display getDisplay() {
return ((WindowManager) getContext().getSystemService(
Context.WINDOW_SERVICE)).getDefaultDisplay();
}
public int getScreenWidth() {
return getDisplay().getWidth();
}
一旦您在上面的代码中获得了显示,您就可以使用DisplayMetrics 来获取密度。 DisplayMetrics 还会为您提供绝对显示和高度。
【讨论】: