在Android上监听多个传感器并使用传感器值更新多个文本视图
我一直在开发一个神秘的应用程序,它允许用户同时获取多个传感器值,并将它们显示在Listview上。然而,令我沮丧的是,我一直无法通过获取加速计值,仅此而已。我尝试了多种方法来注册所有可用的传感器,如陀螺仪、磁场、方向等。由于加速度计具有优先权,每次都会被触发,因此没有一种方法能够检索到值。是否有一种方法可以同时注册多个传感器并从中获取数据以更新UI在Android上监听多个传感器并使用传感器值更新多个文本视图,android,accelerometer,sensors,Android,Accelerometer,Sensors,我一直在开发一个神秘的应用程序,它允许用户同时获取多个传感器值,并将它们显示在Listview上。然而,令我沮丧的是,我一直无法通过获取加速计值,仅此而已。我尝试了多种方法来注册所有可用的传感器,如陀螺仪、磁场、方向等。由于加速度计具有优先权,每次都会被触发,因此没有一种方法能够检索到值。是否有一种方法可以同时注册多个传感器并从中获取数据以更新UI mAccelerometerListener = new SensorEventListener() { @Override
mAccelerometerListener = new SensorEventListener() {
@Override
public void onAccuracyChanged(Sensor arg0, int arg1) {
}
@Override
public void onSensorChanged(SensorEvent event) {
Sensor sensor = event.sensor;
//Update UI
}
}
};
mGyroscopeListener = new SensorEventListener() {
@Override
public void onSensorChanged(SensorEvent event) {
// TODO Auto-generated method stub
if (event.sensor.getType() == Sensor.TYPE_GYROSCOPE) {
//Update Ui
}
}
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
// TODO Auto-generated method stub
}
};
mMagnetometerListener = new SensorEventListener() {
@Override
public void onSensorChanged(SensorEvent event) {
// TODO Auto-generated method stub
if (event.sensor.getType() == Sensor.TYPE_MAGNETIC_FIELD) {
//Update UI
}
}
}
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
// TODO Auto-generated method stub
}
};
if (Config.isSensorPresent(ACCELERATION)) {
//sendMessageToService(Sensor.TYPE_ACCELEROMETER);
mSensorManager.registerListener(mAccelerometerListener, mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER), SensorManager.SENSOR_DELAY_GAME);
}
// Detect whether the device has Gyroscope on it
if (Config.isSensorPresent(GYROSCOPE)) {
//sendMessageToService(Sensor.TYPE_GYROSCOPE);
mSensorManager.registerListener(mGyroscopeListener, mSensorManager.getDefaultSensor(Sensor.TYPE_GYROSCOPE), SensorManager.SENSOR_DELAY_GAME);
}
// Detect whether the device has Magnetic Field Sensor
if (Config.isSensorPresent(MAGNETIC_FIELD)) {
//sendMessageToService(Sensor.TYPE_MAGNETIC_FIELD);
mSensorManager.registerListener(mMagnetometerListener, mSensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD), SensorManager.SENSOR_DELAY_GAME);
}
这似乎并不是同时更新所有的文件。见鬼,它甚至不会发射其他类型的传感器
我已经尝试了在会议上建议的方法。不适用于我。有一个传感器事件侦听器,并向其注册所有传感器,但在onSensorChanged()方法中,您可以找到哪个传感器调用了它,并相应地采取行动
public void onSensorChanged(SensorEvent event) {
if (event.sensor.getType() == Sensor.TYPE_GYROSCOPE)//update gyro
if (event.sensor.getType() == //acclometer)update acc
.
.
.
so on
}
我想第8行可能是你的问题。但是,您也可以尝试以下代码:
public class MainActivity extends AppCompatActivity implements
SensorEventListener{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
SensorManager sm = (SensorManager)this.getSystemService(SENSOR_SERVICE);
Sensor se = sm.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
sm.registerListener((SensorEventListener) this, se, SensorManager.SENSOR_DELAY_GAME);
Sensor se1 = sm.getDefaultSensor(TYPE_GYROSCOPE);
sm.registerListener((SensorEventListener) this, se1, SensorManager.SENSOR_DELAY_GAME);
Sensor se2 = sm.getDefaultSensor(TYPE_MAGNETIC_FIELD);
sm.registerListener((SensorEventListener) this, se2, SensorManager.SENSOR_DELAY_GAME);
}
@Override
public void onSensorChanged(SensorEvent event) {
if(event.sensor.getType()==Sensor.TYPE_ACCELEROMETER){
//Update UI
}
if(event.sensor.getType()==Sensor.TYPE_GYROSCOPE){
//UpdateUI
}
if(event.sensor.getType()==Sensor.TYPE_MAGNETIC_FIELD){
//UpdateUI
}
}
@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
}
}
这段代码应该可以工作,因为无论何时(几乎总是)更改上述三个传感器值中的任何一个,都会调用此函数(OnSensorChanged())。
如果没有,则问题可能出在您的updateUI代码中。请发布完整代码