为什么当可穿戴设备处于环境模式时不调用 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传感器,这个传感器有唤醒版和非唤醒版,可以试试后者。
我正在开发一个可穿戴应用程序,我注意到一个奇怪的行为。
我有一个 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传感器,这个传感器有唤醒版和非唤醒版,可以试试后者。