gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 01:31:09 25 4
gpt4 key购买 nike

我正在开发一个可穿戴应用程序,我注意到一个奇怪的行为。我有一个类 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() 方法?

当未连接到 USB 且处于环境模式时,我已经设法在 Activity 中使用手动 wakeLock 强制执行 onSensorChanged()

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

但是

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

任何建议将不胜感激:)

最佳答案

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

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

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

关于android - 为什么当可穿戴设备处于环境模式时不调用 onSensorChange,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31162516/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com