2017-01-04 9 views
-1

私はSTEP_COUNTERセンサーを登録しています。
私は一人で私のアプリを実行した場合onSensorChangedは発生しません問題は、私は別のアプリを持っている場合もSTEP_COUNTERセンサーを使用して、自分の携帯電話で実行されているしかし、私はonSensorChangedはレジスタの直後に起動します

を歩くとき、右registerListener()後にのみ解雇しました。その後、私のアプリのonSensorChangedはいつもFIREDの直後、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"); 
    } 
} 
+0

あなたは何をしますか?結果を遅らせたいですか? –

+1

これは正常な動作です。それを聞き始めるときは、ブール値フラグを追加してください。 – Qamar

+0

@Qamarなぜそれは正常ですか? –

答えて

1

onSensorChanged素晴らしいいただければ幸いですがトリガーされます。 2番目のアプリがセンサーデータを聞いている場合は、アプリがリスンを開始した直後に経過時間が発生する可能性があります。センサーデータのタイミングに頼るべきではありません。それは「ユーザー生成」のデータであり、信頼できません。

Android documentationのようなまた

このタイプのセンサが活性化しながら、最後にリブートしてから、ユーザによって取られるステップの数を返します。

デルタ測定を追跡するために最初に受け取った値を保存する必要があります。

特定の問題は、レポートモードに関連しているようです。 The documentationは、関連する情報を提供します。

注:他のアプリケーションが高いレートを要求している場合、センサーデータは要求された速度より速い速度で配信されることがあります。

+0

私たちが歩いているので、 'onSensorChanged'が発射されたことを知ることができます**最初のアプリは実行されていません。 'onSensorChanged'メソッドの中で初めて歩くときに何かしたいのですが –

+0

' onSensorChanged'はどのような値ですか? 'onSensorChanged'でユーザが歩いたと言われたら、これは事実であるとみなしてください。 –

関連する問題