0
私はセンサーを使用するアプリケーションで作業しています。 センサーデータをの順でコンソールに表示する機会があります。まず、加速度計、次の磁力計データからデータを取得して表示します。 現在、データはランダムに表示されます。一度加速度計、一度磁力計。時々それらは2回現われる。私はあなたのアプローチで間違って何かがあることを信じていセンサデータを順次取得する方法は?
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) {}
どのように私のアプローチを非同期にするのですか?いくつかの貴重なヒント? – phoenix37
私はあなたがちょうどonSensorChangedメソッドの中にいくつかのif()を追加できると思います。それは、どのセンサーデータが受信されたかに応じて、異なるセンサーデータを表示するためのさまざまなメソッドを呼び出します。あなたは絶対に*その順序で情報を表示しなければなりませんか? –
はい、次はデータベースにデータを格納していたからです。私は加速度計からの1行のデータ、磁力計からの2行目のデータなど、構造をもっと知りたい – phoenix37