SensorThreadRunnable这个线程启动后进入循环,不停地读取传感器的值,并通过ListenerDelegate.onSensorChangedLocked传入已经注册的SensorListener集合sListeners。
onSensorChangedLocked负责把读取到的值传递给SensorListener,所以,如果读到的值需要校正的话,可以在onSensorChangedLocked里面进行。
其中有一个比较特殊的Listener,WindowOrientationListener。用来控制屏幕在横屏和竖屏之间的转换,看一下这两个数组:THRESHOLDS和ROTATE_TO。
THRESHOLDS里面存放了一些角度值,ROTATE_TO里面存放的是几个常量。它们是一一对应的,当前机器的角度落在THRESHOLDS的哪个范围内,机器的屏幕就会旋转ROTATE_TO里面对应位置的常量代表的角度。
THRESHOLDS_WITH_180和ROTATE_TO_WITH_180也是这样的原理。只在允许进行180度旋转时使用。
比如,想要机器支持四个方向屏幕旋转的话,就要发动这里。