Android加速度计类

标签 android class accelerometer

我尝试创建单独的加速度计类来保存加速度计的值,并且我可以随时从任何其他类访问它们,但它似乎不起作用。

这是我的加速度计类(class):

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 。知道我的代码有什么问题吗?

这是使用它的 Activity:

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());
    }
}

我在 list 中也有这个权限:

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

最佳答案

您必须注册您正在使用的传感器,在本例中为加速度计。 我猜您想要“Accelero”类中与加速度计相关的所有内容。

要从该类注册监听器,您必须传递对您的 Activity 的引用。所以你的构造函数应该看起来像这样:

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 作为参数传递即可。

我希望这会有所帮助。

关于Android加速度计类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11922045/

相关文章:

android - 在 Android 中向处理程序发送错误

java - libGDX 正交相机 View 尺寸(使用 Box2D)

Android 加速度计设置 : can I get it to run only when button it pressed.

Java 以 C# 中的样式初始化类

python - Python 类中 'cls' 和 'self' 之间的区别?

ios - 结合 GPS 和加速度计数据来提高定位精度?

android - 使用加速度计计算速度

android - 如何通过 Activity 或服务强制连接到 a2dp 蓝牙设备

android - 自定义 ROM 上的 signatureOrSystem 权限

c++ - 在 vector 中访问类中的 vector