我希望每当媒体开始在 Android 设备上播放时我的应用程序都会收到通知。我似乎找不到发生这种情况时发出的任何系统广播。我知道我可以使用 audiomanager.isMusicActive() 检查,但这需要我不断轮询。
我也知道你可以请求audioFocus,然后在失去焦点时监听,但我也不一定想请求音频焦点!
您可以考虑另一种方法 - 使用 MediaSession 和 MediaController。
这是示例代码:
// In the app playing media
MediaSession mediaSession = new MediaSession(context, "YourMediaSessionTag");
mediaSession.setActive(true);
// In your app
MediaController mediaController = new MediaController(context, mediaSession.getSessionToken());
mediaController.registerCallback(new MediaController.Callback() {
@Override
public void onPlaybackStateChanged(PlaybackState state) {
super.onPlaybackStateChanged(state);
// Check the playback state, including whether it's playing
if (state != null && state.getState() == PlaybackState.STATE_PLAYING) {
// Media is playing
}
}
});
通过使用MediaController,您可以在播放状态发生变化时收到通知,而无需不断轮询。请注意,此方法假设播放媒体的应用程序已正确实现 MediaSession。