如何减慢 android 传感器事件
How to slow down android sensor events
我正在尝试检测 android 设备的运动并从该设备获取线性加速度值。我正在使用 SensorEvent 的时间戳并将其与上次更新时间进行比较以确定是否记录传感器值。但它没有任何效果。为什么它不起作用?
@Override
public void onSensorChanged(SensorEvent event) {
if(event.sensor.getType() == Sensor.TYPE_LINEAR_ACCELERATION) {
int value = (int) event.values[0];
if(actualTime - lastUpdate > 5000) {
Log.d(TAG, "" + value);
lastUpdate = actualTime;
}
很难从您的代码判断您的逻辑是否正确,但一个可能的原因是 Sensor
时间戳以纳秒为单位。
查看文档:http://developer.android.com/reference/android/hardware/SensorEvent.html#timestamp
所以假设您正确设置了事件时间戳,为了忽略自上次事件后不到 5 秒触发的事件,您需要使用 5000000000
.[=14= 的值]
@Override
public void onSensorChanged(SensorEvent event) {
if(event.sensor.getType() == Sensor.TYPE_LINEAR_ACCELERATION) {
long actualTime = event.timestamp; //get the event's timestamp
int value = (int) event.values[0];
if(actualTime - lastUpdate > 5000000000) {
Log.d(TAG, "" + value);
lastUpdate = actualTime;
}
如果要更改访问传感器的频率,可以在registerListener中指定频率,如官方文档所述。
@Override
protected void onResume() {
super.onResume();
mSensorManager.registerListener(this, mLight,SensorManager.SENSOR_DELAY_NORMAL);
}
In this example, the default data delay (SENSOR_DELAY_NORMAL) is specified when the registerListener() method is invoked. The data delay (or sampling rate) controls the interval at which sensor events are sent to your application via the onSensorChanged() callback method. The default data delay is suitable for monitoring typical screen orientation changes and uses a delay of 200,000 microseconds. You can specify other data delays, such as SENSOR_DELAY_GAME (20,000 microsecond delay), SENSOR_DELAY_UI (60,000 microsecond delay), or SENSOR_DELAY_FASTEST (0 microsecond delay). As of Android 3.0 (API Level 11) you can also specify the delay as an absolute value (in microseconds).
绝对可以放慢速度:)
我正在尝试检测 android 设备的运动并从该设备获取线性加速度值。我正在使用 SensorEvent 的时间戳并将其与上次更新时间进行比较以确定是否记录传感器值。但它没有任何效果。为什么它不起作用?
@Override
public void onSensorChanged(SensorEvent event) {
if(event.sensor.getType() == Sensor.TYPE_LINEAR_ACCELERATION) {
int value = (int) event.values[0];
if(actualTime - lastUpdate > 5000) {
Log.d(TAG, "" + value);
lastUpdate = actualTime;
}
很难从您的代码判断您的逻辑是否正确,但一个可能的原因是 Sensor
时间戳以纳秒为单位。
查看文档:http://developer.android.com/reference/android/hardware/SensorEvent.html#timestamp
所以假设您正确设置了事件时间戳,为了忽略自上次事件后不到 5 秒触发的事件,您需要使用 5000000000
.[=14= 的值]
@Override
public void onSensorChanged(SensorEvent event) {
if(event.sensor.getType() == Sensor.TYPE_LINEAR_ACCELERATION) {
long actualTime = event.timestamp; //get the event's timestamp
int value = (int) event.values[0];
if(actualTime - lastUpdate > 5000000000) {
Log.d(TAG, "" + value);
lastUpdate = actualTime;
}
如果要更改访问传感器的频率,可以在registerListener中指定频率,如官方文档所述。
@Override
protected void onResume() {
super.onResume();
mSensorManager.registerListener(this, mLight,SensorManager.SENSOR_DELAY_NORMAL);
}
In this example, the default data delay (SENSOR_DELAY_NORMAL) is specified when the registerListener() method is invoked. The data delay (or sampling rate) controls the interval at which sensor events are sent to your application via the onSensorChanged() callback method. The default data delay is suitable for monitoring typical screen orientation changes and uses a delay of 200,000 microseconds. You can specify other data delays, such as SENSOR_DELAY_GAME (20,000 microsecond delay), SENSOR_DELAY_UI (60,000 microsecond delay), or SENSOR_DELAY_FASTEST (0 microsecond delay). As of Android 3.0 (API Level 11) you can also specify the delay as an absolute value (in microseconds).
绝对可以放慢速度:)