环境

win10 + android studio

文件

IRotationWatcher.aidl

package android.view;interface IRotationWatcher {    void onRotationChanged(int rotation);}

IWindowManager.aidl

// IWindowManager.aidlpackage android.view;import android.graphics.Point;import android.view.IRotationWatcher;/*** * Define this same aidl file here to make it compiling when calling system hidden APIs. * * According to the 'delegation model' for loading classes on Java plattform, the actual * implementation of IWindowManager from the Framework will be applied. */interface IWindowManager {    void getInitialDisplaySize(int displayId, out Point size);    void getBaseDisplaySize(int displayId, out Point size);    void getRealDisplaySize(out Point paramPoint);    /**     * Remove a rotation watcher set using watchRotation.     * @hide     */    void removeRotationWatcher(IRotationWatcher watcher);}

配置

在我的项目内创立aidl文件目录

留神我的项目包名必须与零碎包名统一否则报错
文件配置好后须要
build->make project
这样在我的项目文件内就能够应用了

DisplayUtil.java 工具类

package com.xxx.xxx;import android.annotation.SuppressLint;import android.content.Context;import android.graphics.Bitmap;import android.graphics.Matrix;import android.graphics.Point;import android.os.Build;import android.os.IBinder;import android.os.RemoteException;import android.view.Display;import android.view.IRotationWatcher;import android.view.IWindowManager;import java.lang.reflect.Method;/** Created by Sean on 5/27/17. *//* package */ final class DisplayUtil {    private IWindowManager iWindowManager;    @SuppressLint("PrivateApi")    public DisplayUtil() {        Class<?> serviceManagerClass = null;        try {            serviceManagerClass = Class.forName("android.os.ServiceManager");            Method getService = serviceManagerClass.getDeclaredMethod("getService", String.class);            // WindowManager            Object ws = getService.invoke(null, Context.WINDOW_SERVICE);            iWindowManager = IWindowManager.Stub.asInterface((IBinder) ws);        } catch (Exception e) {            e.printStackTrace();        }    }    /**     * * Retrieves the device actual display size.     *     * @return {@link Point}     */    Point getCurrentDisplaySize() {        try {            Point localPoint = new Point();            // Resolve the screen resolution for devices with OS version 4.3+            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) {                iWindowManager.getInitialDisplaySize(0, localPoint);            } else {                // void getDisplaySize(out Point size)                Point out = new Point();                iWindowManager                        .getClass()                        .getMethod("getDisplaySize", Point.class)                        .invoke(iWindowManager, out);                if (out.x > 0 && out.y > 0) {                    localPoint = out;                }            }            System.out.println(">>> Dimension: " + localPoint);            return localPoint;        } catch (Exception e) {            e.printStackTrace();        }        return null;    }    /**     * Retrieve the current orientation of the primary screen.     *     * @return Constant as per {@link android.view.Surface.Rotation}.     * @see Display#DEFAULT_DISPLAY     */    int getScreenRotation() {        int rotation = 0;        try {            Class<?> cls = iWindowManager.getClass();            try {                rotation = (Integer) cls.getMethod("getRotation").invoke(iWindowManager);            } catch (NoSuchMethodException e) {                rotation =                        (Integer) cls.getMethod("getDefaultDisplayRotation").invoke(iWindowManager);            }        } catch (Exception e) {            e.printStackTrace();        }        System.out.println(">>> Screen rotation: " + rotation);        return rotation;    }    void setRotateListener(RotateListener listener) {        try {            Class<?> clazz = iWindowManager.getClass();            IRotationWatcher watcher =                    new IRotationWatcher.Stub() {                        @Override                        public void onRotationChanged(int rotation) throws RemoteException {                            if (listener != null) {                                listener.onRotate(rotation);                            }                        }                    };            try {                clazz.getMethod("watchRotation", IRotationWatcher.class, int.class)                        .invoke(iWindowManager, watcher, Display.DEFAULT_DISPLAY); // 26+            } catch (NoSuchMethodException ex) {                clazz.getMethod("watchRotation", IRotationWatcher.class)                        .invoke(iWindowManager, watcher);            }        } catch (Exception e) {            e.printStackTrace();        }    }    Bitmap rotateBitmap(Bitmap bitmap, float degree) {        Matrix matrix = new Matrix();        matrix.postRotate(degree);        return Bitmap.createBitmap(                bitmap, 0, 0, bitmap.getWidth(), bitmap.getHeight(), matrix, true);    }    interface RotateListener {        void onRotate(int rotate);    }}

应用

DisplayUtil du = new DisplayUtil();Point size = du.getCurrentDisplaySize();// 屏幕分辩率System.out.println(size.x);System.out.println(size.y);

起源:https://github.com/rayworks/D...