0

アプリケーションで重大な問題が発生して立ち往生しています。今は真剣にあきらめています :( この問題を解決するのを手伝ってください。問題について話し合いましょう。

実際には、センサーリスナーを使用してデバイスの動きを検出しています。タイマーは2分間開始し、動きが発生するとタイマーがリセットされます.2分後に動きが検出されない場合、サービスで振動付きのアラームが開始されますその間、動きが発生した場合はタイマーがリセットされます.それは続きます.振動と音がない場合、センサーは正常に動作しますが、2分が経過してデバイスが振動モードになると、モーションが自動的に検出され、タイマーがリセットされますこれは、振動と音がセンサーに影響を与えるために発生しています。振動がアクティブになる場合、デバイスが動くまでセンサーが機能しないようにする必要があります。

以下は私のコードです: -

        private SensorManager sensorManager;
    private final float NOISE = (float)0.5;
    private float mLastX,mLastY,mLastZ;

    @Override
public void onCreate(){
    super.onCreate();

    vib= (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
    sensorManager=(SensorManager)getSystemService(SENSOR_SERVICE);
    sensorManager.registerListener(GuardMeService.this, sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER), SensorManager.SENSOR_DELAY_NORMAL);
    }

             @Override
         public void onSensorChanged(SensorEvent event) {
    if(event.sensor.getType()==Sensor.TYPE_ACCELEROMETER){
        float x=event.values[0];
        float y=event.values[1];
        float z=event.values[2];


        float deltaX = Math.abs(mLastX - x);
        float deltaY = Math.abs(mLastY - y);
        float deltaZ = Math.abs(mLastZ - z);

        if(deltaX>NOISE){
            compareX();
        }
        else if(deltaY>NOISE){
            compareX();
        }
        else if(deltaZ>NOISE){

            compareX();
        }

        mLastX = x;
        mLastY = y;
        mLastZ = z;

    }
}

private void compareX(){

    mStartTime = SystemClock.uptimeMillis();
    mHandler.removeCallbacks(mUpdateTimeTask);
    mHandler.postDelayed(mUpdateTimeTask, 100);
    vib.cancel();
    GuardMeActivity.timerView.setTextColor(getResources().getColor(R.color.blue));
    stopService(new                   Intent(getApplicationContext(),AlarmServiceForGuardMe.class));
    System.out.println("Movemenet>><><><><><><>><Occur");

}

みんなこの問題を解決するのを手伝ってください。事前にどうもありがとう!!

4

2 に答える 2

1

「振動と音がセンサーに与える影響」の程度によって判断し、そのしきい値を下回る測定値は無視します。

于 2013-08-30T11:22:23.937 に答える
0

最後に答えが得られました..デバイスの振動モーターを無効にする必要があります。

于 2013-08-30T12:32:04.193 に答える