2010-02-05 6 views
1

J'ai vu quelques exemples de code de 1.0/1.1 mais depuis que beaucoup de cela est déprécié maintenant j'espérais trouver un bel exemple 1.5+. J'ai du code ici que j'ai écrit mais ça ne fonctionne pas vraiment correctement. Toute aide serait géniale, merci!Comment puis-je accéder correctement à l'accéléromètre dans Android 1.5?

public class collectAccel extends Activity implements SensorEventListener, 
               OnClickListener{ 

private SensorManager sensorMgr; 
private TextView xLabel, yLabel, zLabel; 
private Button StartBtn; 
private List<Sensor> sensorList; 

private float x, y, z; 
private long lastUpdate = -1; 
// deltas for calibration 
private float cx, cy, cz; 

/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 
    xLabel = (TextView) findViewById(R.id.x_label); 
    yLabel = (TextView) findViewById(R.id.y_label); 
    zLabel = (TextView) findViewById(R.id.z_label); 
    StartBtn = (Button) findViewById(R.id.Button1); 
    StartBtn.setOnClickListener(this); 
} 


@Override 
public void onClick(View arg0) { 
    if (xLabel.getVisibility() != 1) 
     xLabel.setVisibility(1); 
    if (yLabel.getVisibility() != 1) 
     yLabel.setVisibility(1); 
    if (zLabel.getVisibility() != 1) 
     zLabel.setVisibility(1); 
} 

@Override 
protected void onPause() { 
    super.onPause(); 

    sensorMgr.unregisterListener((SensorEventListener)this, sensorList.get(0)); 
    sensorMgr = null; 

    cx = 0; 
    cy = 0; 
    cz = 0; 
} 

@Override 
protected void onResume() { 
    super.onResume(); 
    sensorMgr = (SensorManager) getSystemService(SENSOR_SERVICE); 
    sensorList = sensorMgr.getSensorList(Sensor.TYPE_ACCELEROMETER); 

    boolean accelSupported = sensorMgr.registerListener((SensorEventListener)this, 
      sensorList.get(0), 
      SENSOR_DELAY_UI); 

    if (!accelSupported) { 
     // on accelerometer on this device 
     sensorMgr.unregisterListener((SensorEventListener)this, sensorList.get(0)); 
    } 
} 



@Override 
public void onAccuracyChanged(Sensor arg0, int arg1) { 
    cx = 0; 
    cy = 0; 
    cz = 0; 

} 


@Override 
public void onSensorChanged(SensorEvent arg0) { 
    if (arg0.sensor.getType() == Sensor.TYPE_ACCELEROMETER) { 
     long curTime = System.currentTimeMillis(); 
     // only allow one update every 100ms, otherwise updates 
     // come way too fast and the phone gets bogged down 
     // with garbage collection 
     if (lastUpdate == -1 || (curTime - lastUpdate) > 100) { 
      lastUpdate = curTime; 

      x = arg0.values[0]; 
      y = arg0.values[1]; 
      z = arg0.values[2]; 
      xLabel.setText(String.format("X: %+2.5f (%+2.5f)", (x+cx), cx)); 
      yLabel.setText(String.format("Y: %+2.5f (%+2.5f)", (y+cy), cy)); 
      zLabel.setText(String.format("Z: %+2.5f (%+2.5f)", (z+cz), cz)); 
     } 
    } 
} 
} 

Répondre

1

Vous pouvez chercher dans la Android Reference mais il semble que vous aurez besoin

SensorManager mgr = Context.getSystemService(SENSOR_SERVICE); 
IList<Sensor> sensorList = mgr.getSensorList(SensorManager.SENSOR_ACCELEROMETER); 

Si vous voulez vraiment la liste, mais je pense que vous vouliez dire en fait d'utiliser SensorManager.RegisterListener(SensorListener listener, int sensors, int rate) ou une autre version de cette méthode.

+0

Note: ceci n'est pas testé, je viens de l'écrire en regardant la référence. –

Questions connexes