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

来源:互联网 发布:开发聊天软件 编辑:程序博客网 时间:2024/05/07 01:59

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);  }}
0 0