2010-02-05 2 views
1

Я видел несколько примеров кода 1.0/1.1, но так как многие из них устарели, я надеялся найти хороший пример с более высоким уровнем. У меня есть код, который я написал, но он не работает должным образом. Любая помощь будет большой, спасибо!Как я могу получить доступ к акселерометру правильно в 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)); 
     } 
    } 
} 
} 

ответ

1

Вы можете посмотреть его в Android Reference, но это выглядит, как вы будете нуждаться в

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

Если вы действительно хотите список, но я думаю, что вы на самом деле имел в виду использовать SensorManager.RegisterListener(SensorListener listener, int sensors, int rate) или другую версию этого метода.

+0

Примечание: это не проверено, я просто написал это, глядя на ссылку. –

Смежные вопросы