我尝试创建单独的加速度计类,其中包含加速度计的值,我可以随时从任何其他类访问它们,但它似乎不起作用。
这是我的Accelerometer类:
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" />
答案 0 :(得分: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);
}
}
有关详细教程(本教程中的代码)
,请参阅here答案 1 :(得分: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
作为参数传递。
我希望这会有所帮助。