通过配置系统属性 ro.sf.hwrotation

判断系统是否支持 ro.sf.hwrotation属性,因为这个属性4.4之后可能已经被移除。如果下面的方法存在,则系统支持通过设置该属性来进行旋转

void DisplayDevice::setProjection(int orientation,        const Rect& newViewport, const Rect& newFrame) {    Rect viewport(newViewport);    Rect frame(newFrame);    int displayOrientation = DisplayState::eOrientationDefault;    char property[PROPERTY_VALUE_MAX];    if (mType == DISPLAY_PRIMARY) {        if (property_get("ro.sf.hwrotation", property, NULL) > 0) {            switch (atoi(property)) {                case 90:                    displayOrientation = DisplayState::eOrientation90;                    break;                case 270:                    displayOrientation = DisplayState::eOrientation270;                    break;            }        }    }

修改方式:

  1. 在编译build.prop时添加进去,即修改 \build\tools\buildinfo.sh脚本添加
echo "ro.sf.hwrotation=270"
  1. 在init.rc 添加 Setprop ro.sf.hwrotation 270 进行初始化

优缺点:

  1. 开机动画同样可以进行旋转
  2. ro的属性初始化一次后就不能改变,所以不能动态改变

通过修改WindowsManagerServices

找到方法public boolean updateRotationUncheckedLocked(boolean inTransaction)

 +      // 0 横屏, 3竖屏 +      rotation = setDefaultScreenOrientation(0, rotation);        if (mRotation == rotation && mAltOrientation == altOrientation) {            // No change.            return false;        }

添加方法 ,修改rotation的值

    /**     * add by sg     * change Lock Screen screen`s orientation,     */    public int setDefaultScreenOrientation(int type,int rotation){        switch (type){            case Surface.ROTATION_0:                rotation = Surface.ROTATION_0;                break;            case Surface.ROTATION_270:                rotation = Surface.ROTATION_270;                break;            default:                break;        }        return rotation;    }

优缺点:

  1. 开机动画同样不会进行旋转
  2. type可以通过settings属性保存到系统中,可以动态修改

更多相关文章

  1. 修改WebView背景颜色为透明
  2. 换到android 3.0出现duplicate value for resource 'attr/textCo
  3. Android(安卓)WebView通过代码修改网页的字体大小
  4. 笔记33--ListView和ScrollView点击事件的冲突
  5. Hi3716C Android(安卓)SDK编译说明
  6. 关于EditText的属性和常识
  7. 【flutter】Running Gradle task 'assembleDebug' android 首次
  8. android 修改launcher行数和列数的方法
  9. Android(安卓)5.0新控件常用属性收集

随机推荐

  1. Android(安卓)状态栏, 标题栏, 导航栏,系
  2. Android开机启动Service或Activity或应用
  3. Xamarin Mono For Android 4.6.07004看不
  4. Android常见Exception解决方法
  5. Android Native C development (1) -- En
  6. Android的四种存储方式: sharedpreference
  7. Android系统架构ABC
  8. EditText控件实现只读
  9. Android---Handler消息处理机制
  10. Android的休眠与唤醒 && 实例