gpt4 book ai didi

Android - 在 registerListener() 中使用用户定义的延迟。不工作,为什么?

转载 作者:行者123 更新时间:2023-11-29 01:53:04 27 4
gpt4 key购买 nike

我正在尝试从 Android 手机传感器读取值。我按如下方式初始化传感器:

private void sensorInit() {
sensorManager = (SensorManager) getSystemService(SENSOR_SERVICE);
sensorManager.registerListener(this,
sensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER),
SensorManager.SENSOR_DELAY_FASTEST);
sensorManager.registerListener(this,
sensorManager.getDefaultSensor(Sensor.TYPE_GYROSCOPE),
SensorManager.SENSOR_DELAY_FASTEST);
sensorManager.registerListener(this,
sensorManager.getDefaultSensor(Sensor.TYPE_MAGNETIC_FIELD),
SensorManager.SENSOR_DELAY_FASTEST);
}

然后我可以获得大约 350 个样本/秒。

但是为了省电,我希望能慢下来。所以我修改 SensorManager.SENSOR_DELAY_FASTEST 为 1000。我希望传感器延迟为 1000 毫秒。但显然它不起作用,因为我仍然得到约 350 个样本/秒的速率。

来自 Android 页面:

public boolean registerListener (SensorListener listener, int sensors, int rate, Handler handler)

Parameters

listener: sensor listener object

sensors: a bit masks of the sensors to register to

rate: rate of events. This is only a hint to the system. events may be received faster or slower than the specified rate. Usually events are received faster. The value must be one of SENSOR_DELAY_NORMAL, SENSOR_DELAY_UI, SENSOR_DELAY_GAME, or SENSOR_DELAY_FASTEST. or, the desired delay between events in microseconds. Specifying the delay in microseconds only works from Android 2.3 (API level 9) onwards. For earlier releases, you must use one of the SENSOR_DELAY_* constants.

handler: The Handler the sensor events will be delivered to.

谁能帮帮我?

我怎样才能真正降低传感器采样速度以节省电量?提前致谢。

最佳答案

贡献一点:

如果您使用任何推荐值,例如 SensorManager.SENSOR_DELAY_NORMALSensorManager.SENSOR_DELAY_UI,将使用这些值。如果你看一下实现:

private static int getDelay(int rate) {
int delay = -1;
switch (rate) {
case SENSOR_DELAY_FASTEST:
delay = 0;
break;
case SENSOR_DELAY_GAME:
delay = 20000;
break;
case SENSOR_DELAY_UI:
delay = 66667;
break;
case SENSOR_DELAY_NORMAL:
delay = 200000;
break;
default:
delay = rate;
break;
}
return delay;
}

您可以看到 delay 将默认为除以下值之外的任何其他值:

/** get sensor data as fast as possible */
public static final int SENSOR_DELAY_FASTEST = 0;
/** rate suitable for games */
public static final int SENSOR_DELAY_GAME = 1;
/** rate suitable for the user interface */
public static final int SENSOR_DELAY_UI = 2;
/** rate (default) suitable for screen orientation changes */
public static final int SENSOR_DELAY_NORMAL = 3;

所以只要您的值不是 0,1,3 就可以了,您的值应该被使用。

关于Android - 在 registerListener() 中使用用户定义的延迟。不工作,为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16783325/

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