背景
最近在做一个餐饮项目,要求手机横屏。
问题
之前是采用setRequestedOrientation()和清单文件里设置的双保险,但发现在开发板上完全没有效果。百思不得其解
解决方法
网上找到一个神招,直接修改settings数据库,从而完成任务
Settings.System.putInt(getContentResolver(),Settings.System.ACCELEROMETER_ROTATION,0); // 取消重力感应控制方向
try {
int rotation = Settings.System.getInt(getContentResolver(),Settings.System.USER_ROTATION); // 获取屏幕方向
Log.i(TAG, "onCreate: 屏幕方向:" + rotation);
if (rotation != 0) {
Settings.System.putInt(getContentResolver(),Settings.System.USER_ROTATION, 0); // 设置屏幕方向
}
} catch (Exception e) {
e.printStackTrace();
}
横屏对应0和2,竖屏对应1和3,在Activity的onResume()方法调用此方法,屏幕绝对旋转过来,但是记得申请修改设置的权限
<uses-permission android:name="android.permission.WRITE_SETTINGS"
tools:ignore="ProtectedPermissions" />
高版本还要动态申请。但核心无疑是上面的修改设置数据库