0

我想在触发时继续听长按背景中的音量调高按钮我想完成一些过程。

我可以在我的应用程序中毫无问题地做到这一点。我想在我的应用程序未运行时实现相同的目标 - 发现服务将是最好的交易,但我相信服务无法监听关键事件,那么我可以在广播接收器中实现相同的解决方法吗?接收器可以在没有应用程序运行的情况下在后台运行吗?

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

谢谢!!

4

1 回答 1

1

Android SDK 并不打算让您在您的应用未在前台运行时执行此操作。也许可以使用 NDK 或者如果您知道如何使用 root 访问权限来触摸操作系统(但这需要用户对其设备进行 root)。

我对此进行了一段时间的研究,这是我能想到的最好的方法,它依赖于按下电源按钮时屏幕会关闭和打开的事实(我还没有看到任何设备) t 情况)。当您的应用未运行时,您可以收到此事件。


注册一个 BroadcastReceiver 或 Service 以使用以下 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

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

于 2013-06-29T01:00:08.553 回答