我正在开发一个简单的应用程序,当加速度计达到某个值时会播放声音。
当屏幕亮起时,没有问题。加速器运行的频率很好。
这工作正常。
现在,我想在屏幕关闭时执行此操作。
出于某种原因,无论 SENSOR_DELAY 如何,我每秒只能获得 2 次传感器更新。
我怀疑这与 Android 省电有关。但我需要更高的频率才能准确读取传感器数据。
在我转向唤醒锁定之前,我想知道是否可以覆盖这种“强制”频率降低,以及这是否是设备相关问题。即使屏幕关闭,我也需要它保持更高的更新频率。
我正在开发一个简单的应用程序,当加速度计达到某个值时会播放声音。
当屏幕亮起时,没有问题。加速器运行的频率很好。
这工作正常。
现在,我想在屏幕关闭时执行此操作。
出于某种原因,无论 SENSOR_DELAY 如何,我每秒只能获得 2 次传感器更新。
我怀疑这与 Android 省电有关。但我需要更高的频率才能准确读取传感器数据。
在我转向唤醒锁定之前,我想知道是否可以覆盖这种“强制”频率降低,以及这是否是设备相关问题。即使屏幕关闭,我也需要它保持更高的更新频率。
传感器延迟值只是建议(或者至少它们在 Android 4.0/4.1 左右)。根据实施情况,传感器可能会比请求更快地传递事件。这是由驱动程序自行决定的,并且行为可能因设备型号而异。
为什么要限制传感器的事件传递率?如果您在后台进行复杂的处理并希望减少处理器的负载,请考虑以下方法:当您接收并处理一个事件时,记录其时间戳。当下一个事件到达时,计算其时间戳与之前存储的时间戳之间的差异。仅当时间戳差异至少与您的阈值一样大时才处理事件。虽然这不会降低事件传递率,但会减少处理时间,因为只有一个事件得到处理。
I have no idea, but do you get more updates using SENSOR_DELAY_FASTEST ? Then plug something like this into onSensorChanged():
public void onSensorChanged(SensorEvent event)
{
if (event.sensor.getType() == Sensor.TYPE_)
{
long actualTime = System.currentTimeMillis();
if (actualTime - lastUpdate > 63)
{
lastUpdate = actualTime;
// update
}
}
}