安卓自然传感器方向帮助

4
我正在尝试实现Reto Meier推荐的保持屏幕方向不变的方法。他在Google IO期间的演讲中提到了这个方法(参见#23),可以在Android Protips: Where to Download the Slides and Code Snippets中找到幻灯片。

我已经逐步检查了代码并设置了值,但是屏幕方向仍然会改变。顺便说一下,我在应用程序中注册了此侦听器。

以下是我的代码:

final SensorManager sm = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
    sm.registerListener(
        new SensorEventListener() {
            @Override
            public void onSensorChanged(SensorEvent sensorEvent) {
                if (sensorEvent.sensor.getType() == Sensor.TYPE_ORIENTATION) {
                    final WindowManager wm = (WindowManager) getApplicationContext()
                            .getSystemService(Context.WINDOW_SERVICE);
                    final Display display = wm.getDefaultDisplay();

                    int x = SensorManager.AXIS_X;
                    int y = SensorManager.AXIS_Y;

                    switch (display.getRotation()) {
                    case Surface.ROTATION_90:
                        x = SensorManager.AXIS_Y;
                        y = SensorManager.AXIS_MINUS_X;

                        break;
                    case Surface.ROTATION_180:
                        y = SensorManager.AXIS_MINUS_Y;

                        break;
                    case Surface.ROTATION_270:
                        x = SensorManager.AXIS_MINUS_Y;
                        y = SensorManager.AXIS_MINUS_X;

                        break;
                    case Surface.ROTATION_0:
                    default:
                        break;
                    }

                    SensorManager.remapCoordinateSystem(sensorEvent.values, x, y, new float[] {});
                }
            }

            @Override
            public void onAccuracyChanged(Sensor sensor, int accuracy) {

            }
        }, sm.getDefaultSensor(Sensor.TYPE_ORIENTATION),
        SensorManager.SENSOR_DELAY_NORMAL);
1个回答

12

目前不起作用的30多行代码可以用一些XML值替换在你的AndroidManifest.xml文件中。

我们都看过

<activity android:name=".YourActivity" android:screenOrientation="portrait" ></activity>

我们都知道这在默认方向为横屏的平板电脑上效果不佳。但你们有多少人见过这种情况呢?

<activity android:name=".YourActivity" android:screenOrientation="nosensor" ></activity>

这基本上是使设备方向不受传感器的响应。因此,如果您的默认方向为横向或纵向,则不会更改方向。我已在我的Droid XXoom上进行了测试,并且它的表现符合我的预期。

希望这能对其他人有所帮助。


3
请记住,带有硬件键盘的设备在打开/关闭时方向仍会改变。 - J.G.Sebring
很遗憾,使用默认横向方向的平板电脑可能会在您花费大量时间和精力开发应用程序后给您带来一堆负面评价(一星)。我有过这样的经历! - jap1968
非常好的解决方案。可以在我的平板电脑和智能手机上都运行良好。 - Bevor
那么你的意思是说在7英寸平板电脑上使用android:screenOrientation="nosensor"无效? - bytebender

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接