如何减缓android传感器事件

如何减缓android传感器事件,android,events,sensors,Android,Events,Sensors,我试图检测android设备的运动,并从设备中获取线性加速度值。我使用SensorEvent的时间戳并将其与上次更新时间进行比较,以确定是否记录传感器值。但它没有任何效果。为什么不起作用 @Override public void onSensorChanged(SensorEvent event) { if(event.sensor.getType() == Sensor.TYPE_LINEAR_ACCELERATION) { int value = (int

我试图检测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;
            }

很难从代码中判断逻辑是否正确,但一个可能的原因是
传感器
时间戳以纳秒为单位

见文件:

因此,假设您正确设置了事件时间戳,为了忽略自上次事件发生后不到5秒触发的事件,您需要使用
5000000000
的值

@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;
            }

很难从代码中判断逻辑是否正确,但一个可能的原因是
传感器
时间戳以纳秒为单位

见文件:

因此,假设您正确设置了事件时间戳,为了忽略自上次事件发生后不到5秒触发的事件,您需要使用
5000000000
的值

@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);
}
在本例中,调用registerListener()方法时指定默认数据延迟(传感器延迟正常)。数据延迟(或采样率)控制通过onSensorChanged()回调方法向应用程序发送传感器事件的间隔。默认数据延迟适用于监控典型的屏幕方向变化,并使用200000微秒的延迟。您可以指定其他数据延迟,例如传感器延迟游戏(20000微秒延迟)、传感器延迟UI(60000微秒延迟)或传感器延迟最快(0微秒延迟)。从Android 3.0(API级别11)开始,您还可以将延迟指定为绝对值(以微秒为单位)


当然可以降低速度:)

如果要更改访问传感器的速率,可以在registerListener中指定频率,如官方文档中所示

@Override
protected void onResume() {
    super.onResume();
    mSensorManager.registerListener(this, mLight,SensorManager.SENSOR_DELAY_NORMAL);
}
在本例中,调用registerListener()方法时指定默认数据延迟(传感器延迟正常)。数据延迟(或采样率)控制通过onSensorChanged()回调方法向应用程序发送传感器事件的间隔。默认数据延迟适用于监控典型的屏幕方向变化,并使用200000微秒的延迟。您可以指定其他数据延迟,例如传感器延迟游戏(20000微秒延迟)、传感器延迟UI(60000微秒延迟)或传感器延迟最快(0微秒延迟)。从Android 3.0(API级别11)开始,您还可以将延迟指定为绝对值(以微秒为单位)


当然可以放慢速度:)

+1因为我是第一个提到计时单位为微秒(我假设为毫秒)的人。然而,我无法将事情降低到第二个级别。+1,因为我是第一个提到计时单位为微秒(我假设为毫秒)的人。然而,我无法将事情放慢到第二个层次。