在后台服务中监听音量按钮?

53

我知道如何在一个Activity中监听音量按钮。但是我能在后台服务中做到吗?如果可以,应该怎么做?


你需要监听音量按钮还是音量的变化? - Stobor
1
请注意,目前此功能在 Android 12(后台)上无法正常工作:https://issuetracker.google.com/issues/201546605 - Merthan Erdem
有一个应用程序可以做到所有的事情。它叫做Volumee。不过我不太确定它是如何工作的。 - Robin Dijkhof
14个回答

0

在过去的10年里一直在谷歌搜索这个问题,最终我找到了这个:

https://dev59.com/JU_Sa4cB1Zd3GeqP8gMW#59064820

通过提供AccessibilityService,可以在活动之外监听音量按钮,即使手机被锁定,甚至在它被发送到特定应用程序之前(已经测试过)。唯一的缺点是用户必须在设置中手动激活此服务。

0

结账 控制应用程序的音量和播放 ...这将有助于解决您的问题... 多个应用程序可能希望从后台监听按钮按下,这可能是为什么 KeyEvents 只能由活动处理的原因,因为它们是用户按键的接口。


0
Android在这种情况下没有记录与音量按钮交互的API。所以我想答案是否定的...

0

注意:这仅适用于 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);
    }

6
仅从活动中查看,这个工作正常!与活动不同,服务未列出关键事件。 - Ken Shiro
3
此回调仅包含在Activity类中,而不是Service类。 - Yuan
6
这不是一个答案,因为问题是关于服务而不是活动。 - Ayaz Alifov

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接