Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/181.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 为什么可穿戴设备处于环境模式时不调用onSensorChange_Android_Service_Android Sensors_Ambient - Fatal编程技术网

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

Android 为什么可穿戴设备处于环境模式时不调用onSensorChange,android,service,android-sensors,ambient,Android,Service,Android Sensors,Ambient,我正在开发一款可穿戴应用程序,我注意到一种奇怪的行为。 我有一个类FooService extends服务实现了SensorEventListener,我还重写了onSensorChanged()方法: @Override public void onSensorChanged(SensorEvent sensorEvent) { if (sensorEvent.sensor.getType() != Sensor.TYPE_ACCELEROMETER) {

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

一切都很好,当设备插入USB时,我会收到SensorChanged()调用,这两种模式都是环境模式和正常模式,但不幸的是,在设备未连接USB时进入环境模式3秒后,我不会收到调用

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

当未连接到USB且处于环境模式时,我必须在“活动”中使用手动唤醒锁定来强制启用SensorChanged()

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

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


如果您有任何建议,我们将不胜感激:)

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

2.Ambient确实有一种机制来保持系统处于唤醒状态,但CPU不应睡眠的唯一情况是CPU正在执行绘图操作(通常刷新时钟墙纸)。Ambient是为了省电,所以在活动中添加唤醒锁定是个坏主意


3.您发布的代码似乎是您注册了一个U型加速计传感器,此传感器有唤醒版本和非唤醒版本,可以尝试后一个版本。

您可以解释加速计唤醒版本的更多信息吗。我只熟悉非唤醒版本。我认为sesor可以是非唤醒的,也可以是唤醒的,但不能两者兼而有之。并不是所有的传感器都能唤醒系统。一种简单的检查方法:adb shell dumpsys sensorservice | grep加速计传感器(唤醒)