在后台听硬件媒体按钮长按

Posted

技术标签:

【中文标题】在后台听硬件媒体按钮长按【英文标题】:Listen to hardware media button longpress in background 【发布时间】:2017-03-29 15:10:49 【问题描述】:

即使设备被锁定或应用程序处于后台,我也需要捕捉媒体按钮的长按事件。 onKey 侦听器不适用于后台应用程序。我有一个广播接收器的工作示例,但它只适用于短按。我正在使用 AudioManager 来注册接收器。当我长时间按下按钮时,我在控制台中看到的是这样的:

I/MediaSessionService(684):基于语音的交互:即将使用 ACTION_WEB_SEARCH

I/ActivityManager(684):从显示 0 上的 uid 1000 开始 u0 act=android.speech.action.WEB_SEARCH flg=0x10800000

所以我尝试通过 context.registerReceiver() 方法收听 ACTION_WEB_SEARCH,但没有成功。我还在清单文件中添加了带有意图过滤器的接收器。

还有其他方法可以尝试吗?或者有人知道可行的解决方案吗?我已经搜索和测试这个功能 5 天了,我真的很生气。 =D

【问题讨论】:

【参考方案1】:

我找到了与您在此处描述的完全相同的问题的答案。

您需要做的就是将意图过滤器添加到您想要通过长按媒体按钮启动的活动中。

屏幕解锁时调用WEB_SEARCH。

屏幕锁定时调用VOICE_SEARCH_HANDS_FREE。

向 MainActivity 添加操作的清单文件:

<activity
        android:name=".MainActivity"
        android:launchMode="singleTop"
        android:screenOrientation="portrait">
        <intent-filter android:priority="1000000">
            <action android:name="android.speech.action.VOICE_SEARCH_HANDS_FREE" />
            <action android:name="android.speech.action.WEB_SEARCH" />
            <category android:name="android.intent.category.DEFAULT" />

            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>

    </activity>

首次启动应用并长按按钮时,屏幕底部会出现一个小对话框。对话框会询问您是要使用 Google 应用还是您自己的应用来完成操作,它们都听相同的操作。

不要忘记将其添加到您的活动中,否则它不会显示在您的锁屏上。

@Override
public void onAttachedToWindow() 
    getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED);

【讨论】:

我完全错过了你的答案!非常感谢!

以上是关于在后台听硬件媒体按钮长按的主要内容,如果未能解决你的问题,请参考以下文章

基于51单片机按键短按长按的项目工程

基于51单片机按键短按长按的项目工程

在蓝牙设备上处理长按媒体按钮播放/暂停

黑魂复刻游戏的按键长按功能——Unity随手记

在后台检测主页按钮长按事件

H5实现按钮的长按事件