Android提供了一些回调方法,可以帮助我们处理应用程序内的关键事件 . 但是,如果我想在我的应用程序在后台运行时收听关键事件呢?例如 . 我想在搜索按钮上听长按事件来做一个特殊的功能 .
KeyEvents只能由活动处理,因为它们是用户按键的界面,并且只有当它们位于前台时 . 即使在后台运行的服务也不会对用户输入做出反应 .
但是通过使用服务,您可以找到解决方法 . 您可以通过注册BroadcastReceiver来创建响应硬键按事件的服务 . 例如,在AOSP音乐应用程序中,他们有一个服务(MediaPlaybackService),它通过注册BroadcastReceiver(MediaButtonIntentReceiver)来响应音量键事件 .
这是注册接收器的代码:
mAudioManager = (AudioManager) getSystemService(Context.AUDIO_SERVICE); ComponentName rec = new ComponentName(getPackageName(), MediaButtonIntentReceiver.class.getName()); mAudioManager.registerMediaButtonEventReceiver(rec);
即使音乐应用程序不在前台,这也有效 . this回答的代码片段 .
1 回答
KeyEvents只能由活动处理,因为它们是用户按键的界面,并且只有当它们位于前台时 . 即使在后台运行的服务也不会对用户输入做出反应 .
但是通过使用服务,您可以找到解决方法 . 您可以通过注册BroadcastReceiver来创建响应硬键按事件的服务 . 例如,在AOSP音乐应用程序中,他们有一个服务(MediaPlaybackService),它通过注册BroadcastReceiver(MediaButtonIntentReceiver)来响应音量键事件 .
这是注册接收器的代码:
即使音乐应用程序不在前台,这也有效 . this回答的代码片段 .