我需要添加一个摇动功能来刷新我的 Android 应用程序。
我找到的所有文档都涉及实施SensorListener
,但 Eclipse 告诉我它已被弃用并建议SensorEventListener
.
任何人都可以指导我如何创建这个shake controller
?
这是一个示例代码。
将其放入您的活动类中:
/* put this into your activity class */
private SensorManager mSensorManager;
private float mAccel; // acceleration apart from gravity
private float mAccelCurrent; // current acceleration including gravity
private float mAccelLast; // last acceleration including gravity
private final SensorEventListener mSensorListener = new SensorEventListener() {
public void onSensorChanged(SensorEvent se) {
float x = se.values[0];
float y = se.values[1];
float z = se.values[2];
mAccelLast = mAccelCurrent;
mAccelCurrent = (float) Math.sqrt((double) (x*x + y*y + z*z));
float delta = mAccelCurrent - mAccelLast;
mAccel = mAccel * 0.9f + delta; // perform low-cut filter
}
public void onAccuracyChanged(Sensor sensor, int accuracy) {
}
};
@Override
protected void onResume() {
super.onResume();
mSensorManager.registerListener(mSensorListener, mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER), SensorManager.SENSOR_DELAY_NORMAL);
}
@Override
protected void onPause() {
mSensorManager.unregisterListener(mSensorListener);
super.onPause();
}
并将其添加到您的 onCreate 方法中:
/* do this in onCreate */
mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
mSensorManager.registerListener(mSensorListener, mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER), SensorManager.SENSOR_DELAY_NORMAL);
mAccel = 0.00f;
mAccelCurrent = SensorManager.GRAVITY_EARTH;
mAccelLast = SensorManager.GRAVITY_EARTH;
然后,您可以在应用程序中的任何位置询问“mAccel”当前加速度,该加速度与轴无关,并且不受重力等静态加速度的影响。
大约是。如果没有移动,则为 0;如果设备摇晃,则可以说 >2。
根据评论 - 测试一下:
if (mAccel > 12) {
Toast toast = Toast.makeText(getApplicationContext(), "Device has shaken.", Toast.LENGTH_LONG);
toast.show();
}
Notes:
应停用加速度计onPause并激活onResume以节省资源(CPU、电池)。
该代码假设我们位于地球上;-) 并初始化地球重力加速度。否则,当应用程序启动并从自由落体“撞击”地面时,您会感到强烈的“震动”。然而,由于低切滤波器,代码会适应引力,一旦初始化,它也可以在其他行星或自由空间中工作。
(你永远不知道你的应用程序将使用多长时间......;-)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)