在后台长按硬件媒体按钮
Listen to hardware media button longpress in background
即使设备已锁定或应用程序处于后台,我也需要捕获媒体按钮的长按事件。 onKey 侦听器不适用于后台应用程序。我有一个 BroadcastReceiver 的工作示例,但它只适用于短按。我正在使用 AudioManager 来注册接收器。当我长时间按下按钮时,我在控制台中看到的是:
I/MediaSessionService(684):基于语音的交互:即将使用 ACTION_WEB_SEARCH
I/ActivityManager(684): 从 uid 1000 开始 u0 {act=android.speech.action.WEB_SEARCH flg=0x10800000} 显示 0
所以我尝试通过 context.registerReceiver() 方法收听 ACTION_WEB_SEARCH 但没有成功。我还将带有 intent-filter 的接收器添加到清单文件中。
我还有其他方法可以尝试吗?或者有人知道可行的解决方案吗?我已经搜索和测试这个功能 5 天了,我真的很生气。 =D
我找到了与您在此处描述的问题完全相同的答案。
您需要做的就是将 intent-filter 添加到您想要通过长按媒体按钮启动的activity。
WEB_SEARCH解锁时调用
VOICE_SEARCH_HANDS_FREE锁屏时调用
向 Main 添加了操作的清单文件Activity:
<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 应用程序还是您自己的应用程序完成操作,它们都监听相同的操作。
不要忘记将此添加到您的 Activity 中,否则它不会显示在您的锁屏上。
@Override
public void onAttachedToWindow() {
getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED);
}
即使设备已锁定或应用程序处于后台,我也需要捕获媒体按钮的长按事件。 onKey 侦听器不适用于后台应用程序。我有一个 BroadcastReceiver 的工作示例,但它只适用于短按。我正在使用 AudioManager 来注册接收器。当我长时间按下按钮时,我在控制台中看到的是:
I/MediaSessionService(684):基于语音的交互:即将使用 ACTION_WEB_SEARCH
I/ActivityManager(684): 从 uid 1000 开始 u0 {act=android.speech.action.WEB_SEARCH flg=0x10800000} 显示 0
所以我尝试通过 context.registerReceiver() 方法收听 ACTION_WEB_SEARCH 但没有成功。我还将带有 intent-filter 的接收器添加到清单文件中。
我还有其他方法可以尝试吗?或者有人知道可行的解决方案吗?我已经搜索和测试这个功能 5 天了,我真的很生气。 =D
我找到了与您在此处描述的问题完全相同的答案。
您需要做的就是将 intent-filter 添加到您想要通过长按媒体按钮启动的activity。
WEB_SEARCH解锁时调用
VOICE_SEARCH_HANDS_FREE锁屏时调用
向 Main 添加了操作的清单文件Activity:
<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 应用程序还是您自己的应用程序完成操作,它们都监听相同的操作。
不要忘记将此添加到您的 Activity 中,否则它不会显示在您的锁屏上。
@Override
public void onAttachedToWindow() {
getWindow().addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED);
}