【问题标题】:Clever way to wakeup Android background service on shake在抖动时唤醒 Android 后台服务的巧妙方法
【发布时间】:2012-09-27 13:30:12
【问题描述】:

我希望我的 Android 背景进入睡眠模式 - 然后 在用户开始移动时唤醒。 但是,如果我在NORMAL 模式下使用加速度计(最低采样率 ~ 5Hz),我担心它仍然会消耗太多功率。 到目前为止,最好的方法是在USER_PRESENT - 屏幕开启并解锁。

甚至screen on(possibly with keyguard present) 也不起作用,因为正如你们中的许多人所知,有很多不良应用程序会保持唤醒锁并不时启动屏幕。

我正在考虑让用户按下音量增大/减小按钮..

有没有更好的解决方案?

【问题讨论】:

  • 您可以通过 AlarmManager 定期触发约 1 秒的传感器检查,但这可能会错过事件。
  • 这是个好主意。但正如你所说,如果它错过了事件,那么我的服务将在 2-3 秒后唤醒。醒来后,它必须做一些快速的事情,所以任何延迟都会让我付出代价......

标签: android service accelerometer battery background-service


【解决方案1】:

不知道您是否仍在寻找一种方法来执行此操作,但我(偶然)发现您可以启动一个shakeListener,并且您的应用程序将获取事件,即使在后台也是如此。

(并且“偶然”,我的意思是我不希望我的应用程序播放它应该在应用程序在后台播放时播放的声音,但即使在后台有另一个应用程序时,甚至让手机进入休眠状态,当我将手机揣在兜里走路时,震动足以让应用程序在后台执行操作。)

    /**
     * load and set up the listener for shake detection
     */
    private void loadShaker() {
        mShaker = new ShakeListener(this);
        mShaker.setOnShakeListener(new ShakeListener.OnShakeListener () {
            public void onShake() { 
                if (!mActivityPaused)
                    performMyOperationCausedByShake();
                }
        });
    }

您可能可以这样设置,以便performMyOperationCausedByShake() 执行一个意图,从而导致您想要的活动发生。

(对于您要查找的内容,这可能不够敏感……)

【讨论】:

  • 您是否在清单文件中设置了接收器?如果是这样,关心2分享吗? tks!
  • @john.k.doe 能否提供 ShakeListener 源代码或文档的链接?
猜你喜欢
  • 2023-03-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多