Android 强制获取屏幕方向

    最近在做照相机功能,简单的封装系统相机,遇到一个问题就是无法获取屏幕的当前方向导致屏幕旋转之后无法获得正确的方向,所以照片方向不对。

    在网上查了一下都是通过windowManager的Display或Configuration的getOrientation方法获取当前屏幕方向。但是问题来了,两种方法要求Activity不能固定方向,且需要系统打开自动旋转才能获取正确的值,否则会返回一个固定值。

    搜来搜去也就只有这两种答案,我考虑只能用监听方向传感器来实现了,但是android orientation sensor对屏幕方向几乎是不支持的。最后在API文档里翻出来OrientationEventListener这个东西,看看文档之后觉得这玩意简直太科学了,比用windowManager/Configuration/orientationSensor科学多了,但是网上找不到介绍他的文章,真是好可惜!

    

    要实现OrientationEventListener需要创建一个成员变量:

OrientationEventListener mScreenOrientationEventListener;
    对他初始化:

this.mScreenOrientationEventListener = new OrientationEventListener(mActivity) {
            @Override
            public void onOrientationChanged(int i) {
                // i的范围是0~359
                // 屏幕左边在顶部的时候 i = 90;
                // 屏幕顶部在底部的时候 i = 180;
                // 屏幕右边在底部的时候 i = 270;
                // 正常情况默认i = 0;

                if(45 <= i && i < 135) {
                    mScreenExifOrientation = ExifInterface.ORIENTATION_ROTATE_180;
                } else if(135 <= i && i < 225) {
                    mScreenExifOrientation = ExifInterface.ORIENTATION_ROTATE_270;
                } else if(225 <= i && i < 315) {
                    mScreenExifOrientation = ExifInterface.ORIENTATION_NORMAL;
                } else {
                    mScreenExifOrientation = ExifInterface.ORIENTATION_ROTATE_90;
                }
            }
        };

    这样无论屏幕有没有固定方向,无论系统有没有设定允许屏幕自动旋转都能获取到屏幕当前的方向了!

    开启监听的时候调用listener.enable(), 不需要监听的时候listener.disable()就好了。

  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值