如何顺序获取传感器数据?

How to get sensor data sequentially?

我正在开发一个使用传感器的应用程序。 我将有机会按照给定的顺序在控制台中显示传感器数据。首先,我获取并查看来自加速度计的数据,接下来是磁力计数据。 目前,数据是随机显示的。一次是加速度计,一次是磁力计。有时会出现两次。

这是我的代码:

public class StartFragment extends Fragment implements SensorEventListener {

private SensorManager sensorManager;
private Sensor accelerometer;
private Sensor magnetic;
private static final int PERIOD = 10000;
private Handler handler;
boolean flag = false;

private final Runnable processSensors = new Runnable() {
    @Override
    public void run() {
        sensorManager.registerListener(StartFragment.this, accelerometer, SensorManager.SENSOR_DELAY_UI);
        sensorManager.registerListener(StartFragment.this, magnetic, SensorManager.SENSOR_DELAY_UI);
        flag = true;

        handler.postDelayed(this, PERIOD);
    }
};

public StartFragment(){}

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
                         Bundle savedInstanceState) {
    return inflater.inflate(R.layout.fragment_start, container, false);
}

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    handler = new Handler();
    sensorManager = (SensorManager) getActivity().getSystemService(Context.SENSOR_SERVICE);
    accelerometer = sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
    magnetic = sensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD);
}

@Override
public void onResume() {
    super.onResume();
    handler.post(processSensors);
}

@Override
public void onPause() {
    super.onPause();
    handler.removeCallbacks(processSensors);
    sensorManager.unregisterListener(this, accelerometer);
    sensorManager.unregisterListener(this, magnetic);
}

@Override
public void onSensorChanged(SensorEvent sensorEvent) {
    float[] value = sensorEvent.values;
    if (flag) {

        Log.d("Current sensor: ", sensorEvent.sensor.getName() + " x: " + Float.toString(value[0]));
        Log.d("Current sensor: ", sensorEvent.sensor.getName() + " y: " + Float.toString(value[1]));
        Log.d("Current sensor: ", sensorEvent.sensor.getName() + " z: " + Float.toString(value[2]));

        flag = false;
    }
}

@Override
public void onAccuracyChanged(Sensor sensor, int i) {}

我认为您的方法有问题。传感器是异步工作的,能回答就回答。软件的作用是得到答案并在答案出现时使用它们。

恕我直言,您的解决方案是,在获得前一个传感器的值后启动并初始化任何传感器,或者更好的方法是异步工作并保持可视化独立(顺便说一句mvp 编程的基础知识)