0

加速度計の値を使用する方法を示す他の多くのスレッドを見てきましたが、複数のクラスにまたがることさえありますが、私が見つけた方法はどれも機能せず、何をしても他のクラスに表示する値を取得できませんそれらが定義されているものよりも。動作中の加速度計があり、AccelerometerReader クラスが値を正しく取得していることを知っています。そのクラスでそれらを印刷してテストしたからです。以下にいくつかのコードがありますが、開始値のみが別のクラスに渡され、更新されていないと考えていますが、なぜ機能しないのかわかりません。どんな助けでも大歓迎です!

AccelerometerReader クラス

import android.app.Activity;
import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;
import android.hardware.SensorManager;
import android.os.Bundle;

public class AccelerometerReader extends Activity implements SensorEventListener {

private SensorManager sensorManager;
private float ax;   // these are the acceleration in x, y and z axes
private float ay;
private float az;

public AccelerometerReader(float x, float y, float z) {
    this.ax = x;
    this.ay = y;
    this.az = z;
}

@Override
public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //setContentView(R.layout.main);

        sensorManager=(SensorManager) getSystemService(SENSOR_SERVICE);
        sensorManager.registerListener(this, sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER), SensorManager.SENSOR_DELAY_FASTEST);
   }

 @Override
 public void onAccuracyChanged(Sensor sensor, int accuracy) {
   }

 @Override
 public void onSensorChanged(SensorEvent event) {
     if (event.sensor.getType() != Sensor.TYPE_ACCELEROMETER)
           return;

     if (event.sensor.getType()==Sensor.TYPE_ACCELEROMETER){
           setValueX(event.values[0]);
           setValueY(event.values[1]);
           setValueZ(event.values[2]);

     }

 }


 public void setValueX(float x) {
     ax=x;
 }

 public float getValueX() {
    return ax;
 }

 public void setValueY(float y) {
     ay=y;
 }

 public float getValueY() {
     return ay;
 }

 public void setValueZ(float z) {
     az=z;
 }

 public float getValueZ() {
     return az;
 }
}

加速度計クラス

import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;

public class Accelerometer extends Activity {

private float ax, ay, az;
TextView tvX, tvY, tvZ;
AccelerometerReader acc = new AccelerometerReader(ax, ay, az);

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    tvX = (TextView) findViewById(R.id.tvX);
    tvY = (TextView) findViewById(R.id.tvY);
    tvZ = (TextView) findViewById(R.id.tvZ);

    tvX.setText("" + ax);
    tvY.setText("" + ay);
    tvZ.setText("" + az);
}
}
4

1 に答える 1

0

コードにはたくさんの問題があります:

  1. 関数を実行する1 つのアクティビティ(つまり、"ACCELEROMETER" 値を取得する) がありますが、ユーザーが別のアクティビティを見ている間にこの関数を実行したいとします。これは一般的に悪いことであり、うまくいきません。代わりにServiceを作成する必要があります。

  2. あるクラスから別のクラスに値を渡しています。それらの値を渡すと、それらは単なるコピーになります。したがって、他のクラスからこれらの値に対して行われることは、元のクラスには影響しません。

    //What ever happens to ax, ay, and az will never be known to your class!
    AccelerometerReader acc = new AccelerometerReader(ax, ay, az);
    
  3. これを一度行います:

    tvX.setText("" + ax);
    tvY.setText("" + ay);
    tvZ.setText("" + az);
    

    ax、y、および az が変更されたとしても、現在のコードはそれらを 1 回しか表示しません。値を表示するには、値が変わるたびにそのコードを思い出す必要があります。

では、頑張ってね!

于 2012-06-10T05:42:14.477 に答える