如何检测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);
}
}
如果用户翻阅 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);
}
}