【问题标题】:Is it possible to override SensorManager frequency when the screen is off?屏幕关闭时是否可以覆盖 SensorManager 频率?
【发布时间】:2014-03-03 15:22:43
【问题描述】:

我正在开发一个简单的应用程序,当加速度计达到某个值时播放声音。
当屏幕亮起时,没有问题。加速器运行的频率很好。
这工作正常。

现在,我想在屏幕关闭时执行此操作。
出于某种原因,无论 SENSOR_DELAY 如何,我每秒只能获得 2 次传感器更新。
我怀疑这与 Android 省电有关。但我需要更高的频率才能准确读取传感器数据。

在我转向唤醒锁定之前,我想知道是否可以覆盖这种“强制”频率降低,以及这是否是设备相关问题。我需要它保持更高的更新频率,即使屏幕关闭。

【问题讨论】:

    标签: android intervals accelerator sensormanager


    【解决方案1】:

    我不知道,但您是否使用 SENSOR_DELAY_FASTEST 获得更多更新?然后将类似这样的东西插入 onSensorChanged():

    public void onSensorChanged(SensorEvent event)
    {
        if (event.sensor.getType() == Sensor.TYPE_)
        {
        long actualTime = System.currentTimeMillis();
            if (actualTime - lastUpdate > 63)
            {
            lastUpdate = actualTime;
            // update
            }
        }
    }
    

    【讨论】:

    • SENSOR_DELAY_FASTEST 不会更改屏幕关闭时的间隔。无论我使用什么传感器延迟,它都会回落到每秒大约 2 次更新。你认为这是设备的特定场合吗?
    • 我不知道。从未在设备休眠时使用传感器。猜猜是时候阅读 SensorListener 文档了
    • 也许您可以使用部分唤醒锁。我不知道你到底想做什么。也许广播接收器会起作用?
    • 我正在尝试制作一个撞击探测器。但是,问题不在于我将如何做。我实际上只需要知道是否可以禁用间隔递减。我用谷歌搜索找不到它,所以这是我最后的手段哈哈
    【解决方案2】:

    传感器延迟值只是建议(或者至少它们在 Android 4.0/4.1 左右)。根据实施情况,传感器可能会比请求更快地传递事件。这由驱动程序自行决定,并且行为可能因设备型号而异。

    为什么要限制传感器的事件传递率?如果您在后台进行复杂的处理并希望减少处理器的负载,请考虑以下方法:当您接收并处理一个事件时,记录其时间戳。当下一个事件到达时,计算其时间戳与之前存储的时间戳之间的差异。仅当时间戳差异至少与您的阈值一样大时才处理事件。虽然这不会降低事件传递率,但会减少处理时间,因为只有一个事件得到处理。

    【讨论】:

    • 感谢您的回复:)。但这不是我想要的。我改写了我原来的问题,试图澄清我的真正意思。
    猜你喜欢
    • 2011-11-30
    • 2020-02-12
    • 1970-01-01
    • 2013-06-28
    • 2014-12-20
    • 1970-01-01
    • 1970-01-01
    • 2018-03-29
    • 1970-01-01
    相关资源
    最近更新 更多