0

私は手の波を検出できるセンサーを実装しようとしています。私はハンドホバーを行うことができる例を見つけましたが、手の波はありませんでした。私が使用Android Sensor Hand Wave Detection

次のコードがあるevent.values [0] = 0、それは私の手がセンサにホバーあることを意味する上記のコードで 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])); 
} 
} 
    }; 
} 

、から。しかし、私は手の波を検出するために私のセンサーが必要です。どうすればいいのですか?ありがとう。

答えて

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