Android自然传感器定位帮助

byt*_*der 4 android orientation android-sensors

我正在努力完成Reto Meier的推荐方法,以防止屏幕方向发生变化.可以在Android Protips:下载幻灯片和代码片段的位置找到他在Google IO期间的演讲中的幻灯片(参见#23).

我已逐步完成代码并设置了值,但屏幕方向仍然有所改变.仅供参考,我在应用程序中注册了这个监听器.

这是我的代码:

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);
Run Code Online (Sandbox Code Playgroud)

byt*_*der 12

当前不工作的所有30多行代码都可以替换为AndroidManifest.xml文件中的某些XML值.

我们都见过

<activity android:name=".YourActivity" android:screenOrientation="portrait" ></activity>
Run Code Online (Sandbox Code Playgroud)

我们都知道,对于具有默认横向方向的平板电脑,它不能很好地工作.但是你们有多少人见过这个?

<activity android:name=".YourActivity" android:screenOrientation="nosensor" ></activity>
Run Code Online (Sandbox Code Playgroud)

基本上它使得设备的方向不响应传感器.因此,如果您的默认值是横向或纵向,则不会更改.我已经在我的Droid XXoom上测试了它,它的工作方式与我预期的一样.

我希望这有助于其他人.

  • 请记住,打开/关闭硬件键盘的设备的方向仍会发生变化. (3认同)