我遇到了一个应用程序中的一个主要问题。现在我认真地放弃了:( 请大家帮我解决这个问题。让我们讨论这个问题。
实际上我正在使用传感器监听器来检测设备中的移动。计时器启动 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");
}
伙计们请帮我解决这个问题。谢谢你提前做好准备!!
答案 0 :(得分:1)
确定“振动和声音对传感器的影响”,然后忽略低于该阈值的读数。
答案 1 :(得分:0)
最后我得到了答案..我必须禁用设备中的振动电机。