2013-05-16 43 views
0

我已經在我的應用程序中實現了傳感器功能。現在2分鐘振動處於激活模式後,由於設備得到了一些運動並且傳感器得到了工作。我想讓傳感器激活只有當用戶手動移動device.There不應該對sensor.Following振動的效果是我code.Thanks用於提前...在傳感器模式下振動設備

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

vib.vibrate(val); 

@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(); 
    stopService(new Intent(getApplicationContext(),AlarmService.class)); 
    System.out.println("Movemenet>><><><><><><>><Occur"); 

} 

回答

1

所以,如果我正確讀取,你想打開加速度計,但由於設備的振動而沒有改變它 - 以某種方式過濾它。那真的不可能。該框架沒有辦法做到這一點,任何嘗試這樣做都很困難 - 振動器的強度因設備而異,甚至在同一設備中的呼叫之間也會有所不同。而且他們並沒有真正校準這些東西 - 真的沒有辦法做到這一點。

+0

是啊你是對的..它應該因設備而異。我只在三星Galaxy S3中遇到這個問題。在其他設備上沒有振動對Sensor的影響。請幫我解決這個問題。 –

+0

請Gabe試圖幫助我解決這個問題..由於它我的應用程序沒有交付給客戶端... :( –

+0

我建議測量它的振動有多快,做一些數字信號處理 - 使用帶隙過濾以允許通過除該範圍的值以外的所有內容。 –