android提供了一些回调方法,帮助我们处理应用程序内部的关键事件。但是如果我想在后台运行我的应用程序时监听关键事件呢?我想听听长按事件搜索按钮做一个特别的功能。

最佳答案

keyevents只能由活动处理,因为它们是用户按这些键的界面,并且只有在它们位于前台时才可以处理。即使是在后台运行的服务也不打算对用户输入做出反应。
但通过使用服务,你可以有一个解决办法。您可以通过注册广播接收器来创建响应硬键按下事件的服务。例如,在aosp音乐应用程序中,他们有一个服务(MediaPlaybackService),该服务通过注册广播接收器(MediaButtonIntentReceiver)来响应音量键事件。
这是它注册接收器的代码:

mAudioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE);
ComponentName rec = new ComponentName(getPackageName(),
        MediaButtonIntentReceiver.class.getName());
mAudioManager.registerMediaButtonEventReceiver(rec);

即使音乐应用程序不在前台,这也能工作。来自this答案的代码片段。

08-18 16:05