Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/210.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android onSensorChanged在注册后立即触发_Android_Sensors - Fatal编程技术网

Android onSensorChanged在注册后立即触发

Android onSensorChanged在注册后立即触发,android,sensors,Android,Sensors,我注册了一个步进计数器传感器。 如果我单独运行我的应用程序,onsensorchange不会在registerListener()之后立即触发,它只在我行走时才会触发 但是问题是,如果我有另一个应用程序也使用步进计数器传感器,并且正在我的手机中运行。然后,我的应用程序的onsensorchange总是在registerListener()之后立即启动 为什么会发生,如何预防?我不希望onSensorChanged在'registerListener()之后立即被激发。 任何帮助或建议都将不胜感激

我注册了一个
步进计数器
传感器。
如果我单独运行我的应用程序,
onsensorchange
不会在
registerListener()
之后立即触发
,它只在我行走时才会触发

但是问题是,如果我有另一个应用程序也使用
步进计数器
传感器,并且正在我的手机中运行。然后,我的应用程序的
onsensorchange
总是在
registerListener()之后立即启动

为什么会发生,如何预防?我不希望onSensorChanged在'registerListener()之后立即被激发。
任何帮助或建议都将不胜感激

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    mSensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
    stepCounter = mSensorManager.getDefaultSensor(Sensor.TYPE_STEP_COUNTER);
}

@Override
protected void onResume() {
    super.onResume();
    mSensorManager.registerListener(this, stepCounter, SensorManager.SENSOR_DELAY_UI);
}

@Override
public void onSensorChanged(SensorEvent sensorEvent) {
   if(sensorEvent.sensor.getType() == Sensor.TYPE_STEP_COUNTER){
        Log.d("TAG","Sensor call");
   }
}

onSensorChanged
将在更新间隔结束时触发。如果第二个应用正在侦听传感器数据,则经过的时间间隔可能正好发生在应用开始侦听时。您不应依赖传感器数据的任何计时。它是“用户生成”的数据,不可信任

此外,截至:

此类型的传感器返回自上次激活时重新启动以来用户采取的步骤数

您必须存储收到的第一个值以跟踪增量测量值

您的具体问题似乎与报告模式有关,我会再次向您提供相关信息

注意:如果其他应用程序要求更高的速率,传感器数据的传输速率可能会比要求的更快


你想要什么。是否要延迟结果?这是正常行为。当您想开始监听时,添加布尔标志。@Qamar为什么这是正常的?您不应该使用Toast来记录日志,您应该实际使用日志来帮助调试您正在做的事情。不要使用Toast进行调试。@JoxTraex谢谢,下次我将使用Log。但是在我的情况下,
Toast
绝对不会引起问题。我确信
onSensorChanged
registerListener
之后立即被解雇,我们可以知道
onSensorChanged
被解雇是因为我们不走,而第一个应用程序正在运行。因为在
onSensorChanged
方法中,我想在我们第一次行走时做一些事情
onSensorChanged
给你什么样的值?如果
onSensorChanged
说用户走了一步,你应该将这视为事实。