Ok, so after 3 days of playing around and frustrating errors, I've managed to solve it, if anyone else needs to figure this out:
First implement the SensorEventListener:
private class Engine extends CanvasWatchFaceService.Engine implements SensorEventListener
Next, within the onVisibilityChanged, I registered two methods I've created:
@Override
public void onVisibilityChanged(boolean visible) {
super.onVisibilityChanged(visible);
if (visible) {
registerReceiver();
registerAccelerometer();
mTime.clear(TimeZone.getDefault().getID());
mTime.setToNow();
} else {
unregisterReceiver();
unregisterAccelerometer();
}
updateTimer();
}
And the two methods:
private void registerAccelerometer() {
sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
sensorManager.registerListener(this,
sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),
SensorManager.SENSOR_DELAY_NORMAL);
}
private void unregisterAccelerometer() {
sensorManager.unregisterListener(this);
}
Then, within the onSensorChanged, where I listen for accelerometer changes:
@Override
public void onSensorChanged(SensorEvent sensorEvent) {
......
// Calculate here
}
sensorX = (int)linear_acceleration[0];
sensorY = (int)linear_acceleration[1];
sensorZ = (int)linear_acceleration[2];
}
Assigning these to the three variables, before the onDraw() method is called:
@Override
public void onDraw(Canvas canvas, Rect bounds) {
// Get the current Time
mTime.setToNow();
// Set the current accelerometer readings.
accelerometerX.setText("X : " + String.valueOf(sensorX));
accelerometerY.setText("Y : " + String.valueOf(sensorY));
accelerometerZ.setText("Z : " + String.valueOf(sensorZ));
accelerometerRateOfChange.setText("T: " + String.valueOf(totalDisplacement));
}
In theory, this should be the same for all sensors, not just the accelerometer.
It is worth noting that I created this using Android Studio's sample apps.