好的,所以经过 3 天的玩耍和令人沮丧的错误,我已经设法解决它,如果其他人需要解决这个问题:
首先实现 SensorEventListener:
private class Engine extends CanvasWatchFaceService.Engine implements SensorEventListener
接下来,在 onVisibilityChanged 中,我注册了我创建的两个方法:
@Override
public void onVisibilityChanged(boolean visible) {
super.onVisibilityChanged(visible);
if (visible) {
registerReceiver();
registerAccelerometer();
mTime.clear(TimeZone.getDefault().getID());
mTime.setToNow();
} else {
unregisterReceiver();
unregisterAccelerometer();
}
updateTimer();
}
以及两种方法:
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);
}
然后,在 onSensorChanged 中,我监听加速度计的变化:
@Override
public void onSensorChanged(SensorEvent sensorEvent) {
......
// Calculate here
}
sensorX = (int)linear_acceleration[0];
sensorY = (int)linear_acceleration[1];
sensorZ = (int)linear_acceleration[2];
}
在调用 onDraw() 方法之前将它们分配给三个变量:
@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));
}
理论上,这对于所有传感器都应该是相同的,而不仅仅是加速度计。
值得注意的是,我使用 Android Studio 的示例应用程序创建了这个。