我知道如何在一个Activity中监听音量按钮。但是我能在后台服务中做到吗?如果可以,应该怎么做?
在过去的10年里一直在谷歌搜索这个问题,最终我找到了这个:
https://dev59.com/JU_Sa4cB1Zd3GeqP8gMW#59064820
通过提供AccessibilityService,可以在活动之外监听音量按钮,即使手机被锁定,甚至在它被发送到特定应用程序之前(已经测试过)。唯一的缺点是用户必须在设置中手动激活此服务。结账 控制应用程序的音量和播放 ...这将有助于解决您的问题... 多个应用程序可能希望从后台监听按钮按下,这可能是为什么 KeyEvents 只能由活动处理的原因,因为它们是用户按键的接口。
注意:这仅适用于 Activity,而不是问题所述的服务。
根据需要回调的上下文,可能会提供替代解决方案。
为了能够检测音量按钮,Activity需要覆盖 dispatchKeyEvent
函数。为了在多个 Activity 中存在,可以编写一个包含被重写函数的超类,并由所有后续 Activity 扩展。
以下是检测音量键按下的代码:
// Over-ride this function to define what should happen when keys are pressed (e.g. Home button, Back button, etc.)
@Override
public boolean dispatchKeyEvent(KeyEvent event)
{
if (event.getAction() == KeyEvent.ACTION_DOWN)
{
switch (event.getKeyCode())
{
case KeyEvent.KEYCODE_VOLUME_UP:
// Volume up key detected
// Do something
return true;
case KeyEvent.KEYCODE_VOLUME_DOWN:
// Volume down key detected
// Do something
return true;
}
}
return super.dispatchKeyEvent(event);
}