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 回答