1.Android 4.3引入的wm工具:

a.获取Android设备屏幕分辨率: adb shell wm size

b.获取android设备屏幕密度: adb shell wm density

Wm.java

BaseCommand { ... public void onShowUsage(PrintStream out) { out.println( "usage: wm [subcommand] [options]\n" + " wm size [reset|WxH]\n" + " wm density [reset|DENSITY]\n" + " wm overscan [reset|LEFT,TOP,RIGHT,BOTTOM]\n" + "\n" + "wm size: return or override display size.\n" + "\n" + "wm density: override display density.\n" + "\n" + "wm overscan: set overscan area for display.\n" ); } public void onRun() throws Exception { mWm = IWindowManager.Stub.asInterface(ServiceManager.checkService( Context.WINDOW_SERVICE)); if (mWm == null) { System.err.println(NO_SYSTEM_ERROR_CODE); throw new AndroidException("Can't connect to window manager; is the system running?"); } String op = nextArgRequired(); if (op.equals("size")) { runDisplaySize(); } else if (op.equals("density")) { runDisplayDensity(); } else if (op.equals("overscan")) { runDisplayOverscan(); } else { showError("Error: unknown command '" + op + "'"); return; } } private void runDisplaySize() throws Exception { String size = nextArg(); int w, h; if (size == null) { Point initialSize = new Point(); Point baseSize = new Point(); try { mWm.getInitialDisplaySize(Display.DEFAULT_DISPLAY, initialSize); mWm.getBaseDisplaySize(Display.DEFAULT_DISPLAY, baseSize); System.out.println("Physical size: " + initialSize.x + "x" + initialSize.y); if (!initialSize.equals(baseSize)) { System.out.println("Override size: " + baseSize.x + "x" + baseSize.y); } } catch (RemoteException e) { } return; } else if ("reset".equals(size)) { w = h = -1; } else { int div = size.indexOf('x'); if (div <= 0 || div >= (size.length()-1)) { System.err.println("Error: bad size " + size); return; } String wstr = size.substring(0, div); String hstr = size.substring(div+1); try { w = Integer.parseInt(wstr); h = Integer.parseInt(hstr); } catch (NumberFormatException e) { System.err.println("Error: bad number " + e); return; } } try { if (w >= 0 && h >= 0) { // TODO(multidisplay): For now Configuration only applies to main screen. mWm.setForcedDisplaySize(Display.DEFAULT_DISPLAY, w, h); } else { mWm.clearForcedDisplaySize(Display.DEFAULT_DISPLAY); } } catch (RemoteException e) { } } private void runDisplayDensity() throws Exception { String densityStr = nextArg(); int density; if (densityStr == null) { try { int initialDensity = mWm.getInitialDisplayDensity(Display.DEFAULT_DISPLAY); int baseDensity = mWm.getBaseDisplayDensity(Display.DEFAULT_DISPLAY); System.out.println("Physical density: " + initialDensity); if (initialDensity != baseDensity) { System.out.println("Override density: " + baseDensity); } } catch (RemoteException e) { } return; } else if ("reset".equals(densityStr)) { density = -1; } else { try { density = Integer.parseInt(densityStr); } catch (NumberFormatException e) { System.err.println("Error: bad number " + e); return; } if (density < 72) { System.err.println("Error: density must be >= 72"); return; } } try { if (density > 0) { // TODO(multidisplay): For now Configuration only applies to main screen. mWm.setForcedDisplayDensity(Display.DEFAULT_DISPLAY, density); } else { mWm.clearForcedDisplayDensity(Display.DEFAULT_DISPLAY); } } catch (RemoteException e) { } } ...
View Code

相关文章: