为什么当可穿戴设备处于环境模式时不调用 onSensorChange

Why onSensorChange is not invoked when Wearable device is in Ambient Mode

我正在开发一个可穿戴应用程序,我注意到一个奇怪的行为。 我有一个 class FooService extends Service implements SensorEventListener 并且我已经重写了 onSensorChanged() 方法:

    @Override
    public void onSensorChanged(SensorEvent sensorEvent) {
    if (sensorEvent.sensor.getType() != Sensor.TYPE_ACCELEROMETER) {
        Log.e(TAG, getString(R.string.err_wrong_sensor_registered));
        return;
    }
    float x = sensorEvent.values[0];
    float y = sensorEvent.values[1];
    float z = sensorEvent.values[2];
    ...
    }

此服务是从 FooActivity extends WearableActivity 开始的 - 这里我覆盖了 onEnterAmbient()onExitAmbient() 方法,只做了一些 UI 更改(不与服务交互)。

一切正常 我在环境模式和正常模式下将设备插入 USB 时收到 onSensorChanged() 调用,但不幸的是,当设备未连接到 USB 时进入环境模式 3 秒后我没有接到电话.

Q1:所以我的问题是为什么在环境模式下且未连接到 USB 时不调用 onSensorChanged() 方法?

我在 Activity

中使用手动唤醒锁在未连接到 USB 且处于环境模式时设法强制执行 onSensorChanged()
  wakeLock = mgr.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "MyWakeLock");

但是

Q2:Activity ambientMode 机制不应该自动获取 wakeLock 吗?

任何建议将不胜感激:)

1.When 系统处于环境模式,CPU 与正常情况下一样执行,这意味着大多数时间在环境模式下,CPU 处于休眠状态。因此除非传感器是唤醒传感器,否则它无法唤醒系统,因此您不会收到 onSensorChanged。之所以能插USB工作是因为用USB调试时,CPU不休眠

2.Ambient确实有保持系统唤醒的机制,但是CPU唯一不应该休眠的情况是CPU正在做绘图动作(通常刷新时钟壁纸) .环境是为了省电,所以在 activity 中添加唤醒锁是个坏主意。

3.The代码你post好像你注册了一个TYPE_ACCELEROMETER传感器,这个传感器有唤醒版和非唤醒版,可以试试后者。