收听音量增大按钮并在android中激活一个进程

收听音量增大按钮并在android中激活一个进程,android,android-service,android-broadcast,Android,Android Service,Android Broadcast,我想继续听在后台长按音量按钮时触发我想得到一些过程完成 我可以在我的应用程序中做到这一点,没有任何问题。我希望在我的应用程序未运行时实现同样的效果-我认为服务是最好的选择,但我相信服务无法收听关键事件,那么我可以在广播接收器中实现同样的效果,有什么解决方法?接收器是否可以在后台运行而不运行应用程序 有人能帮我解决这个问题吗 谢谢 当你的应用程序不在前台运行时,Android SDK不打算让你这样做。也许可以使用NDK,或者如果您知道如何使用root访问权限访问操作系统(但这需要用户为其设备设置根

我想继续听在后台长按音量按钮时触发我想得到一些过程完成

我可以在我的应用程序中做到这一点,没有任何问题。我希望在我的应用程序未运行时实现同样的效果-我认为服务是最好的选择,但我相信服务无法收听关键事件,那么我可以在广播接收器中实现同样的效果,有什么解决方法?接收器是否可以在后台运行而不运行应用程序

有人能帮我解决这个问题吗


谢谢

当你的应用程序不在前台运行时,Android SDK不打算让你这样做。也许可以使用NDK,或者如果您知道如何使用root访问权限访问操作系统(但这需要用户为其设备设置根目录)

我很久以前就研究过这个问题,这是我能想到的最好的方法,这取决于当按下电源按钮时屏幕的关闭和打开(我没有看到任何设备不是这样)。此事件是您的应用程序未运行时可以接收的事件


使用以下IntentFilter注册BroadcastReceiver或服务以接收意向:

IntentFilter f = new IntentFilter();
f.addAction(Intent.ACTION_SCREEN_ON);
f.addAction(Intent.ACTION_SCREEN_OFF);
当收到意图时,使用

System.currentTimeMillis() 
获取收到此意图的时间戳

为了确保用户确实想要触发您已经实现的事件,您需要连动多次按下电源按钮。使用SharedReferences保存上次接收事件的时间

在随后按下电源按钮时,检查当前按下的时间是否比上一次按下的时间长。如果有,请重新启动已发生的按压次数(再次使用SharedReferences)

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


以下是我为接收器准备的代码:

这不是很好,是我很久以前发布的第一个应用程序。如果我有空的话,我会重写它,把整个东西放到GitHub上

如果您想看到它的实际应用,请参见商店列表:


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

为什么要这样做?您是否只想在应用程序关闭时通过硬件按钮触发事件?如果是这样的话,我已经找到了一个黑客的解决办法,但它只适用于电源按钮。电源按钮对我来说也很好。比如,如果我长按5次音量放大按钮,我想用我的应用程序触发一些进程。