gpt4 book ai didi

android - 无法让加速度计感知震动事件

转载 作者:搜寻专家 更新时间:2023-11-01 08:10:02 25 4
gpt4 key购买 nike

我正在尝试将某些功能与“摇动”事件联系起来。我在这里使用了教程:

http://www.vogella.com/articles/AndroidSensor/article.html

http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/os/Sensors.html

我正在使用 OpenIntents 的 SensorSimulator 进行测试.我能够将模拟器连接到 SensorSimulator。当我在模拟器中移动设备时,模拟器上的加速度计读数与模拟器的读数完全一致。

在我的代码中,我添加了一些日志语句,例如:

public class ShakeEventListener implements SensorEventListener {

private void getAccelerometer(SensorEvent event) {

float[] values = event.values;
// Movement
float x = values[0];
float y = values[1];
float z = values[2];

float accelationSquareRoot = (x * x + y * y + z * z)
/ (SensorManager.GRAVITY_EARTH * SensorManager.GRAVITY_EARTH);
long actualTime = System.currentTimeMillis();
Log.i("onSensorChanged", "accelationSquareRoot: " + accelationSquareRoot);

if (accelationSquareRoot >= 2) //
{
if (actualTime - lastUpdate < 200) {
return;
}
lastUpdate = actualTime;

// Shake Detected
Log.i("onSensorChanged", "Shakie Shakie!");
}
}

public void onSensorChanged(SensorEvent se) {

Log.d("onSensorChanged", "X: " + se.values[SensorManager.DATA_X] +
" Y: " + se.values[SensorManager.DATA_Y] +
" Z: " + se.values[SensorManager.DATA_Z]);

if (se.sensor.getType() == Sensor.TYPE_ACCELEROMETER)
{
getAccelerometer(se);
}
}
}

如果我在模拟器中移动设备,log cat 中的输出似乎没有改变。它总是显示这些读数(读数每分钟不断更新多次,但它们始终相同):

05-22 15:09:07.717: I/onSensorChanged(686): accelationSquareRoot: 1.0006835
05-22 15:09:08.518: D/onSensorChanged(686): X: 0.0 Y: 9.77622 Z: 0.813417
05-22 15:09:08.518: I/onSensorChanged(686): accelationSquareRoot: 1.0006835

我尝试了 APIDemos 示例 sensors.java 但它也注册了相同的行为。我可能会错过什么?

最佳答案

这是适用于我的应用的加速度计代码:

// shake
private SensorManager mSensorManager;
private float mAccel; // acceleration apart from gravity
private float mAccelCurrent; // current acceleration including gravity
private float mAccelLast; // last acceleration including gravity


//Shake
private final SensorEventListener mSensorListener = new SensorEventListener() {
int count = 0;
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
if (mAccel > 5) {
//do something
}
}

public void onAccuracyChanged(Sensor sensor, int accuracy) {

}
};

这是 source我是如何得到这段代码的。

关于android - 无法让加速度计感知震动事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10699660/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com