检测设备方向

问题描述 投票:5回答:3

我需要检测android设备方向变化,而无需手动使用传感器数据,同时保持活动方向保持一定方向

[onConfigurationChange将无法使我的活动停止旋转。

[玩弄传感器数据以检测方向变化,我认为这是车轮的一项发明,因为android已经嵌入了用于检测设备方向变化的算法的实现。从另一方面来说,检测方向变化并不是这样简单的检查。

    public void onSensorChanged(SensorEvent event) {
        if (event.sensor.getType() != Sensor.TYPE_ACCELEROMETER || event.values.length < 3) {
            return;
        }
        //getResources().getConfiguration().orientation;
        if (event.values[1] < 6.5 && event.values[1] > -6.5) {
            if (orientation!=1) {
                Log.d("Sensor", "Protrait");
            }
            orientation=1;
        } else {
            if (orientation!=0) {
                Log.d("Sensor", "Landscape");
            }
            orientation=0;
        }
   }

它确实需要真正的数据处理,例如从噪声中过滤和突然的短暂晃动/旋转。

所以有什么想法可以使用旧版服务来检测设备方向? (再一次,我会将我的活动保持在某个方向,因此onConfigurationChange将不起作用)

android automation accelerometer autorotate
3个回答
10
投票

有一个定向事件的监听器。


8
投票

通过在清单中设置screenOrientation属性,您将不再能够从onConfigurationChanged获取方向值,因为它将停止触发,可以实现SensorEventListener来获取Pitchroll和[C0 ]角度来计算方向,但是对于这样的任务来说有点复杂和过大。我发现的最佳解决方案是使用yaw,以下代码将根据方向更改更新旋转值,该值根据旋转角度为0到4:


5
投票

我的活动设置为始终处于纵向模式。将此代码放在Create上。

© www.soinside.com 2019 - 2024. All rights reserved.