首页 > 系统 > Android > 正文

Android API Guide for Media Apps(六)——媒体会话的回调(Media Session Callbacks)

2019-11-09 18:09:03
字体:
来源:转载
供稿:网友

Media session Callbacks

媒体会话回调调用不同的接口方法来控制播放器,管理音频焦点,并实现媒体会话和媒体浏览器服务间的通信。下面的列表总结这些任务如何分布在回调中。

_ onPlay() onPause() onStop()
Audio Focus requestFocus() passing in your OnAudioFocusChangeListener. Always call requestFocus() first, PRoceed only if focus is granted. abandonAudioFocus()
Service startService() stopSelf()
Media Session setActive(true) - Update metadata and state -Update metadata and state setActive(false) - Update metadata and state
Player Implementation Start the player Pause the player Stop the player
Becoming Noisy Register your BroadcastReceiver Unregister your BroadcastReceiver
Notifications startForeground(notification) stopForeground(false) stopForeground(true)

回调的示例架构:

private IntentFilter intentFilter = new IntentFilter(AudioManager.ACTION_AUDIO_BECOMING_NOISY);// Defined elsewhere...private AudioManager.OnAudioFocusChangeListener afChangeListener;private BecomingNoisyReceiver myNoisyAudioStreamReceiver = new BecomingNoisyReceiver();private MediaStyleNotification myPlayerNotification;private MediaSessionCompat mediaSession;private MediaBrowserService service;private SomeKindOfPlayer player;MediaSessionCompat.Callback callback = newMediaSessionCompat.Callback() { @Override public void onPlay() { AudioManager am = mContext.getSystemService(Context.AUDIO_SERVICE); // Request audio focus for playback, this registers the afChangeListener int result = am.requestAudioFocus(afChangeListener, // Use the music stream. AudioManager.STREAM_MUSIC, // Request permanent focus. AudioManager.AUDIOFOCUS_GAIN); if (result == AudioManager.AUDIOFOCUS_REQUEST_GRANTED) { // Start the service service.start(); // Set the session active (and update metadata and state) mediaSession.setActive(true); // start the player (custom call) player.start(); // Register BECOME_NOISY BroadcastReceiver registerReceiver(myNoisyAudioStreamReceiver, intentFilter); // Put the service in the foreground, post notification service.startForeground(myPlayerNotification); } } @Override public void onStop() { AudioManager am = mContext.getSystemService(Context.AUDIO_SERVICE); // Abandon audio focus am.abandonAudioFocus(afChangeListener); unregisterReceiver(myNoisyAudioStreamReceiver); // Start the service service.stop(self); // Set the session inactive (and update metadata and state) mediaSession.setActive(false); // stop the player (custom call) player.stop(); // Take the service out of the foreground, remove notification service.stopForeground(true); } @Override public void onPause() { AudioManager am = mContext.getSystemService(Context.AUDIO_SERVICE); // Update metadata and state // pause the player (custom call) player.pause(); // unregister BECOME_NOISY BroadcastReceiver unregisterReceiver(myNoisyAudioStreamReceiver, intentFilter); // Take the service out of the foreground, retain the notification service.stopForeground(false); }}
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表