Rk_平台获取和设置屏幕旋转角度

孔建柏
2023-12-01

下了一个可以旋转屏幕角度的功能,当时用的是RK3128测试的,杠杠的,代码如下

  /**
     * 获取屏幕的旋转角度
     *
     * @param context
     * @return
     */
    public static int getScreenRoate(Context context) {
        try {
            int angle = ((WindowManager) context.getSystemService(Context.WINDOW_SERVICE)).
                    getDefaultDisplay().getRotation();
            switch (angle) {
                case Surface.ROTATION_0:
                    return 0;
                case Surface.ROTATION_90:
                    return 90;
                case Surface.ROTATION_180:
                    return 180;
                case Surface.ROTATION_270:
                    return 270;
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return 0;
    }

后来测试和我反馈,在3288 和3399上运行,没办法回显,我就纳闷了 ,都是android系统,代码为什么不能通用 ,后来问了一下驱动层的同事,意思就是3128是应用层的旋转,其他的从底层修改的属性,然后就给我一个属性key值,让我自己去研究一下。

这里就需要区分一下CPU的型号,来做出判断方法了

1:获取CPU型号的方法

    

   /***
     * 获取CPU型号
     * @return
     */
    public static String getMobileType() {
        String cpuModel = android.os.Build.PRODUCT;
        if (cpuModel.contains("_")) {
            cpuModel = cpuModel.substring(0, cpuModel.indexOf("_"));
        }
        return cpuModel;
    }

2:根据CPU型号获取角度

 /**
     * 获取屏幕旋转的角度
     *
     * @return
     */
    public int getScreenRoate() {
        String cpuModel = CpuModel.getMobileType();
        int roateNum = 0;
        if (cpuModel.contains("rk312x")) {
            roateNum = SystemManagerUtil.getScreenRoate(ScreenSettingActivity.this);
        } else {
            String roate = RootCmd.getProperty(RootCmd.PROOERTY_INFO, "0");
            roateNum = Integer.parseInt(roate);
        }
        return roateNum;
//        return SystemManagerUtil.getScreenRoate(ScreenSettingActivity.this);
    }

2.1:3128的屏幕获取旋转角度的方法

         

 /**
     * 获取屏幕的旋转角度
     *
     * @param context
     * @return
     */
    public static int getScreenRoate(Context context) {
        try {
            int angle = ((WindowManager) context.getSystemService(Context.WINDOW_SERVICE)).
                    getDefaultDisplay().getRotation();
            switch (angle) {
                case Surface.ROTATION_0:
                    return 0;
                case Surface.ROTATION_90:
                    return 90;
                case Surface.ROTATION_180:
                    return 180;
                case Surface.ROTATION_270:
                    return 270;
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return 0;
    }

 

2.2:其他板卡获取角度的方法,下面的代码的含义就是

     adb shell    

  getprop persist.sys.displayrot

       直接获取设备该属性的值,代码如下      

    public static final String PROOERTY_INFO = "persist.sys.displayrot";

    //    获取和设置SystemProperties属性的代码
    //    getprop persist.sys.displayrot
    public static String getProperty(String key, String defaultValue) {
        String value = defaultValue;
        try {
            Class<?> c = Class.forName("android.os.SystemProperties");
            Method get = c.getMethod("get", String.class, String.class);
            value = (String) (get.invoke(c, key, defaultValue));
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            return value;
        }
    }

 

3:以上就是获取屏幕旋转角度的方法,那么如何设定呢 ?比较简单,一看就懂

      

 private void changeScreenRoate(final int degree) {
        try {
            Class classType = Class.forName("android.os.SystemProperties");
            Method getMethod = classType.getDeclaredMethod("get", new Class[]{String.class});
            String product = (String) getMethod.invoke(classType, new Object[]{"ro.build.description"});
            product = product.substring(0, 6);
            if (product.contains("312x")) {
                product = "rk3128";
            }
            RK rk = (RK) (product.contains("rk3328") ? Rk3328.INSTANCE : (product.contains("rk3399") ? Rk3399.INSTANCE : (product.contains("rk3368") && "22".equals(Build.VERSION.SDK) ? Rk3368_5.INSTANCE : (product.contains("rk3288") && "22".equals(Build.VERSION.SDK) ? Rk3288_5.INSTANCE : (product.contains("rk3128") ? Rk3128.INSTANCE : (product.contains("rk3288") && "25".equals(Build.VERSION.SDK) ? Rk3288_7.INSTANCE : (product.contains("rk3368") && "25".equals(Build.VERSION.SDK) ? Rk3368_7.INSTANCE : Rk3368_5.INSTANCE)))))));
            rk.rotateScreen(ScreenSettingActivity.this, degree + "");
            finish();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

 

 类似资料: