onSensorChanged在android中不断被模拟器触发

时间:2016-01-11 20:38:43

标签: android android-sensors event-listener

我正在使用ACCELEROMETER传感器,并通过

注册了一个监听器
mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
    mAcceleratorSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
    mSensorManager.registerListener(this, mAcceleratorSensor , SensorManager.SENSOR_DELAY_NORMAL);

这就是我的onSensorChanged的样子

@Override
public final void onSensorChanged(SensorEvent event) {
    int sensorType = event.sensor.getType();
    switch(sensorType){
        case Sensor.TYPE_ACCELEROMETER:
            float valueX = event.values[0];
            float valueY = event.values[1];
            float valueZ = event.values[2];
            Log.d(TAG, "Sensor Changed value:"+valueX+":"+valueY+":"+valueZ);
            break;

    }

然而,这就是我在日志中看到的

01-12 02:01:18.063 19691-19691/com.taxis.locationupdates2 D/LocationActivity: Sensor Changed value:2.0:2.0:2.0
01-12 02:01:18.129 19691-19691/com.taxis.locationupdates2 D/LocationActivity: Sensor Changed value:2.0:2.0:2.0

即使值没有变化,它仍然在无限循环中调用onSensorChanged。我还没有用真实的设备测试它。是否有任何设置来控制它。

2 个答案:

答案 0 :(得分:2)

这种方法命名很差。

来自onSensorChanged的{​​{1}}:

  

当有新的传感器事件时调用。请注意"已更改"是   有点用词不当,如果我们有一个新的,也会被称为   从具有完全相同传感器值的传感器读取(但更新   时间戳)。

答案 1 :(得分:0)

传感器文档包含有关相同

的详细信息

http://developer.android.com/guide/topics/sensors/sensors_overview.html

默认数据延迟适用于监控典型的屏幕方向更改,并使用200,000微秒的延迟。您可以指定其他数据延迟,例如SENSOR_DELAY_GAME(20,000微秒延迟),SENSOR_DELAY_UI(60,000微秒延迟)或SENSOR_DELAY_FASTEST(0微秒延迟)。从Android 3.0(API Level 11)开始,您还可以将延迟指定为绝对值(以微秒为单位)。

您指定的延迟只是建议的延迟。 Android系统和其他应用程序可以改变这种延迟。作为最佳实践,您应该指定最大的延迟,因为系统通常使用比您指定的延迟更小的延迟(也就是说,您应该选择仍然满足应用程序需求的最慢采样率)。使用较大的延迟会降低处理器的负载,从而降低功耗。