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



我正在开发一款可穿戴应用程序,我注意到了一种奇怪的行为。我有一个类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启动的——这里我覆盖了只做一些UI更改的onEnterAmbient()onExitAmbient()方法(不与服务交互(。

一切都很完美,当设备连接到USB时,无论是环境模式还是正常模式,我都会接到SensorChanged((调用,但不幸的是,在设备未连接到USB进入环境模式3秒后,我没有接到调用。

Q1:所以我的问题是,为什么在环境模式下并且没有连接到USB时,onSensorChanged((方法没有被调用

当未连接到USB且处于环境模式时,我已设法在活动中使用手动唤醒锁定来强制开启SensorChanged((

  wakeLock = mgr.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "MyWakeLock");

但是

Q2:难道Activity不应该通过ambientMode机制自动获取wakeLock吗

如有任何建议,我们将不胜感激:(

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

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

3.你发布的代码似乎你注册了一个TYPE_ACCELEROMETER传感器,这个传感器有唤醒版本和非唤醒版本,可以尝试后一个。

相关内容

  • 没有找到相关文章

最新更新