I want to access the orientation and accelerometer sensor at the same time. What is the right way to do this?
I am using
public class MainActivity extends Activity
{
private SensorManager sensorManager;
private Sensor sensor;
private Sensor sensor2;
private float x, y, z;
private float x1, y1, z1;
private String output;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
sensorManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
sensor = sensorManager.getSensorList(Sensor.TYPE_ACCELEROMETER).get(0);
sensor2 = sensorManager.getSensorList(Sensor.TYPE_ORIENTATION).get(0);
}
private void refreshDisplay() {
output = String.format(";%f;%f;%f;%f;%f;%f", x, y, z, x1, y1, z1);
}
@Override
protected void onResume() {
super.onResume();
sensorManager.registerListener(accelerationListener, sensor,
SensorManager.SENSOR_DELAY_GAME);
sensorManager.registerListener(orientationListener, sensor2,
SensorManager.SENSOR_DELAY_GAME);
}
@Override
protected void onPause() {
sensorManager.unregisterListener(accelerationListener);
sensorManager.unregisterListener(orientationListener);
super.onStop();
}
private SensorEventListener accelerationListener = new SensorEventListener() {
@Override
public void onAccuracyChanged(Sensor sensor, int acc) {
}
@Override
public void onSensorChanged(SensorEvent event) {
x = event.values[0];
y = event.values[1];
z = event.values[2];
refreshDisplay();
}
};
private SensorEventListener orientationListener = new SensorEventListener() {
@Override
public void onAccuracyChanged(Sensor sensor, int acc) {
}
@Override
public void onSensorChanged(SensorEvent event) {
x1 = event.values[0];
y1 = event.values[1];
z1 = event.values[2];
refreshDisplay();
}
};
}
But this is choppy. Using only sensor or the accelerometer is smooth.
EDITED: OnPause
I want to access the orientation and accelerometer sensor at the same time. What is the right way to do this?
I would use getDefaultSensor()
on SensorManager
rather than assume that the 0th entry in the list is the right one.
Also, either use onResume()
and onPause()
as a pair or use onStart()
and onStop()
as a pair. You are using onResume()
and onStop()
, which means there may be cases where you register for sensor events multiple times.
But this is choppy
Considering that you are not doing anything with the data in the code that you have shown above, I have no idea how you can tell that something is "choppy". Moreover, what your real code does with the data may be the cause of the "choppy" behavior with twice the data input -- use Traceview to figure out where you are spending more-than-expected time.