Android 在后台长按“收听硬件媒体”按钮

Android 在后台长按“收听硬件媒体”按钮,android,button,background,long-press,Android,Button,Background,Long Press,我需要捕捉媒体按钮的长按事件,即使设备已锁定或应用程序处于后台。onKey listener不适用于后台应用程序。我有一个BroadcastReceiver的工作示例,但它只适用于短新闻。我正在使用AudioManager注册接收器。当我长时间按下按钮时,在控制台中可以看到: I/MediaSessionService(684):基于语音的交互:即将使用ACTION\u WEB\u搜索 I/ActivityManager(684):从显示器0上的uid 1000启动u0{act=android.

我需要捕捉媒体按钮的长按事件,即使设备已锁定或应用程序处于后台。onKey listener不适用于后台应用程序。我有一个BroadcastReceiver的工作示例,但它只适用于短新闻。我正在使用AudioManager注册接收器。当我长时间按下按钮时,在控制台中可以看到:

I/MediaSessionService(684):基于语音的交互:即将使用ACTION\u WEB\u搜索

I/ActivityManager(684):从显示器0上的uid 1000启动u0{act=android.speech.action.WEB_SEARCH flg=0x10800000}

因此,我尝试了通过context.registerReceiver()方法进行ACTION\u WEB\u搜索,但没有成功。我还将receiver with intent过滤器添加到清单文件中


我还有别的办法吗?或者有人知道有效的解决方案吗?我已经搜索和测试这一功能5天了,我真的很生气=我找到了你在这里描述的问题的答案

您只需长按媒体按钮,将意向过滤器添加到要启动的活动中

当屏幕解锁时,将调用WEB_搜索

当屏幕锁定时,会调用VOICE\u SEARCH\u HANDS\u 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>

我完全没有听到你的答案!非常感谢你!
@Override
public void onAttachedToWindow() {
    getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED);
}