在 API 21 之前,我使用的是这样的调用audioManager.registerMediaButtonEventReceiver(receiver);
当用户按下耳机上的按钮时处理媒体按钮事件。从 API 21 开始,似乎MediaSession
应该使用。但是,我没有得到任何回应。
final MediaSession session = new MediaSession(context, "TAG");
session.setCallback(new Callback() {
@Override
public boolean onMediaButtonEvent(final Intent mediaButtonIntent) {
Log.i("TAG", "GOT EVENT");
return super.onMediaButtonEvent(mediaButtonIntent);
}
});
session.setFlags(MediaSession.FLAG_HANDLES_MEDIA_BUTTONS |
MediaSession.FLAG_HANDLES_TRANSPORT_CONTROLS);
session.setActive(true);
以上是我的想法should有效但没有。有谁知道为什么这不起作用或者我应该如何注册?
要接收媒体按钮事件,您需要:
设置 MediaSession.Callback 并处理正确的事件 (*)
set MediaSession.FLAG_HANDLES_MEDIA_BUTTONS
and MediaSession.FLAG_HANDLES_TRANSPORT_CONTROLS
flags
将 mediaSession 设置为活动状态
-
正确设置播放状态,特别是会话处理的操作(播放事件)。例如:
PlaybackState state = new PlaybackState.Builder()
.setActions(
PlaybackState.ACTION_PLAY | PlaybackState.ACTION_PLAY_PAUSE |
PlaybackState.ACTION_PLAY_FROM_MEDIA_ID | PlaybackState.ACTION_PAUSE |
PlaybackState.ACTION_SKIP_TO_NEXT | PlaybackState.ACTION_SKIP_TO_PREVIOUS)
.setState(PlaybackState.STATE_PLAYING, position, speed, SystemClock.elapsedRealtime())
.build();
mSession.setPlaybackState(state);
我的猜测是你错过了#4,因为你做的其他一切都是正确的。
(*) Callback.onMediaButtonEvent 的默认实现处理所有常见媒体按钮并调用正确的 onXXXX() 方法(onPlay、onPause、onSkipToNext 等)。除非您需要处理不常见的媒体按钮 - 或者出于调试目的 - ,否则您不需要重写 onMediaButtonEvent。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)