【问题标题】:Android Wear Watchface with Sensor Data带有传感器数据的 Android Wear 表盘
【发布时间】:2015-11-01 17:50:52
【问题描述】:

对于缺少代码示例,我深表歉意,但到目前为止我所尝试的一切都是一团糟。

我已经尝试在网上搜索信息,也许我没有搜索到正确的术语。

我可以使用 Android Studio 中的示例创建表盘,并且我创建了一个从传感器检索数据的应用程序。我不能做的是将两者结合起来。

我想做的是创建一个 Android Wear 表盘,它可以显示从手表上的传感器收集的各种数据。

例如,加速度计始终开启以启用手腕手势。

任何人都可以指出我如何解决这个问题的正确方向,而无需发布指向 android API 的链接,因为我已经筋疲力尽了。

问候,

艾米特

【问题讨论】:

  • 如果您打算一直收集来自传感器的数据,我会说这不符合用户的最佳利益,因为这会立即耗尽电池。一个好的表盘会进入环境模式,在这种状态下,CPU 几乎处于睡眠状态以保护电池。在这种状态下,通常会向用户显示非常基本的信息,通常是小时和分钟(甚至不是秒),可能还有一些更静态/变化较少的数据。当它出现该状态时,您会收到一个回调,您可以做一些花哨的工作,例如读取传感器值。
  • 好的,谢谢。最初,我只是想看看我是否可以从表盘访问数据,目标是不显示数据,而是让它监听传感器变化可能产生的某些事件。我尝试搜索教程和代码示例以基本上在表盘上显示步骤或心跳,但无济于事。
  • 您可能想描述当您尝试从表盘访问传感器数据以获得直接帮助时遇到的问题。
  • 问题:我正在尝试从加速度计中检索读数,并在读数发生变化时将它们显示在表盘上,即检测运动,如 X、Y、Z 读数。我认为加速度计始终处于活动状态,因为手势检测允许手表离开环境模式。
  • 你一直在说你想做的事,但你并没有说当你尝试这样做时它失败了;我们询问的是您遇到的问题,而不是您正在尝试做的事情;你需要展示你的代码和与之相关的日志

标签: wear-os android-sensors watch-face-api


【解决方案1】:

好的,经过 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 的示例应用创建的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多