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 的示例应用程序创建了这个。