0

我正試圖實現可以檢測手波的傳感器。我發現了一個可以做手翱翔的例子,但不是手搖。Android傳感器手波檢測

我用下面的代碼是從 How to controlandroid proximity sensor?

public class AndroidProximitySensorActivity extends Activity { 

TextView ProximitySensor, ProximityMax, ProximityReading; 

SensorManager mySensorManager; 
Sensor myProximitySensor; 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    ProximitySensor = (TextView)findViewById(R.id.proximitySensor); 
    ProximityMax = (TextView)findViewById(R.id.proximityMax); 
    ProximityReading = (TextView)findViewById(R.id.proximityReading); 

    mySensorManager = (SensorManager)getSystemService(
     Context.SENSOR_SERVICE); 
    myProximitySensor = mySensorManager.getDefaultSensor(
     Sensor.TYPE_PROXIMITY); 

    if (myProximitySensor == null){ 
    ProximitySensor.setText("No Proximity Sensor!"); 
    }else{ 
    ProximitySensor.setText(myProximitySensor.getName()); 
    ProximityMax.setText("Maximum Range: " 
     + String.valueOf(myProximitySensor.getMaximumRange())); 
    mySensorManager.registerListener(proximitySensorEventListener, 
     myProximitySensor, 
     SensorManager.SENSOR_DELAY_NORMAL); 
    } 
} 

SensorEventListener proximitySensorEventListener 
= new SensorEventListener(){ 

@Override 
public void onAccuracyChanged(Sensor sensor, int accuracy) { 
// TODO Auto-generated method stub 

} 

@Override 
public void onSensorChanged(SensorEvent event) { 
// TODO Auto-generated method stub 

if(event.sensor.getType()==Sensor.TYPE_PROXIMITY){ 
ProximityReading.setText("Proximity Sensor Reading:" 
    + String.valueOf(event.values[0])); 
} 
} 
    }; 
} 

在上面的代碼中,當event.values [0] = 0,則表示我的手是懸停在傳感器。但是,我需要我的傳感器來檢測手動波。我該怎麼做?謝謝。

回答

0

請試試這個代碼:

private SensorManager sensorManager; 
    private Sensor proximitySensor; 

    private final int WAVE_TIME = 2000; 
    private final int WAVE_NEEDED_MOVEMENTS = 3; 
    private long lastWaveTime = 0; 
    private float lastSensorValue; 
    private float maxSensorValue; 
    private float numOfMovements = 0; 


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

       sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE); 
       proximitySensor = sensorManager.getDefaultSensor(Sensor.TYPE_PROXIMITY); 
       sensorManager.registerListener(proximitySensorEventListener, proximitySensor,SensorManager.SENSOR_DELAY_NORMAL); 
       maxSensorValue = proximitySensor.getMaximumRange(); 
     } 

     @Override 
     public void onSensorChanged(SensorEvent event) { 

      if(lastWaveTime + WAVE_TIME > System.currentTimeMillis()) { 
       System.out.println("Reset timing..."); 
       lastWaveTime = System.currentTimeMillis(); 
       numOfMovements = 0; 
       lastSensorValue = event.values[0]; 
      } else if((event.values[0] != maxSensorValue && lastSensorValue == maxSensorValue) || (event.values[0] == maxSensorValue && lastSensorValue != maxSensorValue)){ 
       numOfMovements++; 
       if(numOfMovements == WAVE_NEEDED_MOVEMENTS) { 
        System.out.println("WAVE EVENT"); 
        lastWaveTime = System.currentTimeMillis(); 
        numOfMovements = 0; 
       } 
      } 

     } 
+0

這並沒有真正的工作......你忘了申報proximitySensorEventListener。無論如何,我測試,它不是很可靠,任何其他的想法?我也對手波探測器感興趣 – moyo