听取音量增大按钮并激活android中的进程

时间:2013-06-28 23:54:20

标签: android android-service android-broadcast

我希望在触发后继续长时间按下音量调高按钮我希望完成一些过程。

我可以在我的应用程序中执行此操作而没有任何问题。当我的应用程序没有运行时,我希望实现相同的目标 - 想出服务将是最好的交易,但我相信服务无法听取关键事件,那么我可以在广播接收器中实现相同的工作是什么?接收器可以在没有应用程序运行的情况下在后台运行吗?

有人可以帮我解决这个问题吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

Android SDK无意让您在应用未在前台运行时执行此操作。也许有可能使用NDK或者您知道如何使用root访问权限触摸操作系统(但这需要用户根设备)。

我研究了这一段时间,这是我能想到的最好的,它依赖于按下电源按钮时屏幕关闭和打开的事实(我没有看到任何设备在哪里事实并非如此)。当您的应用未运行时,您可以收到此事件。


注册BroadcastReceiver或服务以接收具有以下IntentFilter的意图:

IntentFilter f = new IntentFilter();
f.addAction(Intent.ACTION_SCREEN_ON);
f.addAction(Intent.ACTION_SCREEN_OFF);

收到意图后,使用

System.currentTimeMillis() 

获取收到此意图的时间戳。

为了确保用户真正打算触发您已实施的事件,您需要连锁多次按下电源按钮。使用SharedPreferences保存上次收到事件的时间。

按下电源按钮后,检查当前印刷机是否在前一次印刷后没有发生太长时间。如果是,请重新启动已经发生的印刷次数(再次使用SharedPreferences)。

如果按下接收的当前电源按钮在此最大时间范围内,并且已按下的次数达到一定量(我使用4作为默认值,3似乎会导致无意触发),然后触发您的事件


以下是我对接收器的代码: https://github.com/eskimoapps/count_stuff/blob/master/Receiver.java

它不是很好,来自我很久以前发布的第一个应用程序。如果我能够解决它,我会重写它并将整个事情放在GitHub上。

如果你想在这里看到它的商店列表:

https://play.google.com/store/apps/details?id=count.stuff&hl=en

我会列出其他人的应用以避免自我宣传,但我不知道其他任何应用这样做。