如何检测android中的翻转动作?

How to detect the turnover motion in android?

如果用户翻阅 phone,我想对此作出反应,停止我的文本到语音朗读。这对我的应用程序来说是个不错的功能,但我如何才能检测到这个动作呢?我对运动传感器不是很熟悉,而且我在任何地方都找不到这个特定的运动监听器,主要是屏幕方向。感谢您的帮助!

此示例 activity 演示了如何使用设备的重力传感器来检测设备何时翻转。在方法 onSensorChanged() 中,术语 factor 确定 "turn over" 必须完成的程度。典型范围可能是 0.7 到 0.95。

在 Android 中添加了对重力传感器的支持 API 9. 并非所有设备都有重力传感器。

public class MainActivity extends AppCompatActivity implements SensorEventListener {

    private static final String TAG = "Demo";

    private SensorManager mSensorManager;
    private Sensor mGravitySensor;
    private boolean mFacingDown;

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

    @Override
    public void onSensorChanged(SensorEvent event) {
        final float factor = 0.95F;

        if (event.sensor == mGravitySensor) {
            boolean nowDown = event.values[2] < -SensorManager.GRAVITY_EARTH * factor;
            if (nowDown != mFacingDown) {
                if (nowDown) {
                    Log.i(TAG, "DOWN");
                } else {
                    Log.i(TAG, "UP");
                }
                mFacingDown = nowDown;
            }
        }
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
        mGravitySensor = mSensorManager.getDefaultSensor(Sensor.TYPE_GRAVITY);

        if (mGravitySensor == null) {
            Log.w(TAG, "Device has no gravity sensor");
        }
    }

    @Override
    protected void onResume() {
        super.onResume();
        if (mGravitySensor != null) {
            mSensorManager.registerListener(this, mGravitySensor, SensorManager.SENSOR_DELAY_NORMAL);
        }
    }

    @Override
    protected void onPause() {
        super.onPause();
        mSensorManager.unregisterListener(this);
    }
}