我尝试创建单独的加速度计类来保存加速度计的值,并且我可以随时从任何其他类访问它们,但它似乎不起作用。
这是我的加速度计类(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/