2010-02-05 2 views
1

나는 1.0/1.1의 몇 가지 코드 예제를 보았습니다.하지만 이제는 많은 것들이 deprecated되었으므로 좋은 1.5+ 예제를 찾고 싶습니다. 여기에 내가 작성한 코드가 있지만 제대로 작동하지 않습니다. 어떤 도움이라도 좋을 것입니다, 고마워요!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

참고 : 이것은 테스트되지 않았습니다. 참조를 보면서이 내용을 썼습니다. –

관련 문제