Android 佩戴带有传感器数据的表盘
Android Wear Watchface with Sensor Data
抱歉缺少代码示例,但到目前为止我尝试过的一切都是一团糟。
我试过在线搜索信息,也许我没有搜索到正确的术语。
我可以使用 Android Studio 中的示例创建表盘,并且我已经创建了一个从传感器检索数据的应用程序。我不能做的是将两者结合起来。
我想做的是创建一个 Android Wear 表盘,可以显示从手表上的传感器收集的各种数据。
例如,加速度计始终开启以启用手腕手势。
任何人都可以指出正确的方向来解决这个问题,而不是将 link 发布到 android API,因为我已经用尽了。
此致,
艾美特
好的,经过 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 的示例应用程序创建了这个。
抱歉缺少代码示例,但到目前为止我尝试过的一切都是一团糟。
我试过在线搜索信息,也许我没有搜索到正确的术语。
我可以使用 Android Studio 中的示例创建表盘,并且我已经创建了一个从传感器检索数据的应用程序。我不能做的是将两者结合起来。
我想做的是创建一个 Android Wear 表盘,可以显示从手表上的传感器收集的各种数据。
例如,加速度计始终开启以启用手腕手势。
任何人都可以指出正确的方向来解决这个问题,而不是将 link 发布到 android API,因为我已经用尽了。
此致,
艾美特
好的,经过 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 的示例应用程序创建了这个。