下了一个可以旋转屏幕角度的功能,当时用的是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();
}
}