2

加速度計の値を保持する別の加速度計クラスを作成しようとしましたが、いつでも他のクラスからアクセスできますが、うまくいかないようです。

ここに私の加速度計クラスがあります:

import android.hardware.Sensor;
import android.hardware.SensorEvent;
import android.hardware.SensorEventListener;

public class Accelero implements SensorEventListener {

    private float xAxis;
    private float yAxis;
    private float zAxis;

    public float getX(){
        return this.xAxis;
    }

    public float getY(){
        return this.yAxis;
    }

    public float getZ(){
        return this.zAxis;
    }

    public void onAccuracyChanged(Sensor sensor, int accuracy) {
        // TODO Auto-generated method stub

    }

    public void onSensorChanged(SensorEvent event) {
            xAxis = event.values[0];
            yAxis = event.values[1];
            zAxis = event.values[2];
    }

}

get*();ご覧のとおり、作成したメソッドを介して値を取得しようとしています。しかし、それは常に戻ってくるよう0, 0, 0です。私のコードの何が問題なのですか?

これが使用されるアクティビティは次のとおりです。

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.widget.EditText;

public class MainActivity extends Activity {

    private EditText output;
    private static int DIS = 1;
    Accelero acc;

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

        output =(EditText) findViewById(R.id.editText1);
        handler.sendEmptyMessageDelayed(DIS, 1);
        acc = new Accelero(this);

    }

    private Handler handler = new Handler() {

        @Override
        public void handleMessage(Message msg) {
            if (msg.what == DIS){
                refresh();
                handler.sendEmptyMessageDelayed(DIS, 1);     
            }
        }
    };

    public void refresh(){
        output.setText("X:"+acc.getX()+"\nY:"+acc.getY()+"\nZ:"+acc.getZ());
    }
}

私はマニフェストにもこの前提を持っています:

<uses-feature android:name="android.hardware.sensor.accelerometer" android:required="true" />
4

2 に答える 2

1

使用しているセンサー (この場合は加速度計) を登録する必要があります。「Accelero」クラスの加速度計に関連するすべてが必要だと思います。

そのクラスからリスナーを登録するには、アクティビティへの参照を渡す必要があります。したがって、コンストラクターは次のようになります。

SensorManager manager;
Sensor accelerometer;
Activity foo;

public Accelero(Activity foo) {
    this.foo = foo;
    manager = (SensorManager) this.foo.getSystemService(Context.SENSOR_SERVICE);
    accelerometer = manager.getSensorList(Sensor.TYPE_ACCELEROMETER).get(0);
    manager.registerListener(this, accelerometer, SensorManager.SENSOR_DELAY_GAME);
 }

Acceleroオブジェクトを作成するときはthis、パラメーターとして渡すだけです。

これが役立つことを願っています。

于 2012-08-12T12:26:13.490 に答える
1

アクティビティのセンサー マネージャーにセンサー リスナーを登録する必要があります。

public class Main extends Activity implements SensorEventListener {
    private float mLastX, mLastY, mLastZ;
    private boolean mInitialized;

    private SensorManager mSensorManager;

    private Sensor mAccelerometer;
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        mSensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
        mAccelerometer = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
        mSensorManager.registerListener(new Accelero(), mAccelerometer, SensorManager.SENSOR_DELAY_NORMAL);
    }
}

詳細なチュートリアルについては、こちらを参照してください (このチュートリアルから取得したコード)

于 2012-08-12T12:18:29.243 に答える