registerMediaButtonEventReceiver没有接收事件

我正在尝试接收物理按钮事件,例如手机侧面的音量按钮点击。 我需要在服务中执行此操作,因为如果用户随时单击“音量调高/调低”按钮,我希望收到该消息。 我在网上看了很多,但是我不能让它工作,也不知道什么是错的。 这是我的代码:

在清单中:

     

在服务OnStart()中:

  AudioManager manager = (AudioManager) getSystemService(AUDIO_SERVICE); manager.registerMediaButtonEventReceiver(new ComponentName(getPackageName(), clsMediaButtonReceiver.class.getName())); 

一个broascastreceiver:

 public class clsMediaButtonReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { //This is never shown Toast toast1 = Toast.makeText(Context, intent.getAction(), Toast.LENGTH_SHORT); toast1.show(); } } 

我将到我的intentfilter中,现在我获得了音量键事件。 我还没弄明白如何在我的应用程序中正确分发它们…希望它有所帮助!

我知道这是一个老问题,我遇到了同样的问题,发现我们必须在持有AudioManager.AUDIOFOCUS_GAIN之后注册registerMediaButtonEventReceiver(..),否则它不能正常工作。

我尝试使用@Ton写的相同Manifest和BroadcastReciever

 private class ClassOnAudioFocusChangeListener implements AudioManager.OnAudioFocusChangeListener { @Override public void onAudioFocusChange(int focusChange) { if (focusChange == AudioManager.AUDIOFOCUS_LOSS_TRANSIENT){ Log.e("ClassOnAudioFocusChangeListener: ", "AUDIOFOCUS_LOSS_TRANSIENT"); } else if (focusChange == AudioManager.AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK) { Log.e("ClassOnAudioFocusChangeListener: ", "AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK"); } else if (focusChange == AudioManager.AUDIOFOCUS_GAIN) { Log.e("ClassOnAudioFocusChangeListener: ", "AUDIOFOCUS_GAIN"); mAudioManager.registerMediaButtonEventReceiver(mMediaButtonEventComponenName); } else if (focusChange == AudioManager.AUDIOFOCUS_LOSS) { Log.e("ClassOnAudioFocusChangeListener: ", "AUDIOFOCUS_LOSS"); } } }; 

这是同一个清单。

       

我遇到了和你一样的问题,如果你解决了,我想知道。 与我的代码的不同之处在于我在另一个类中的broadcastReceiver类。 像这样的东西:

 public class MyClass extends Activity { /// Code public class MediaButtonReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { /// Code } } } 

和清单:

      

谢谢你的帮助