Android媒体应用(五)--构建视频应用程序

原文地址:https://developer.android.google.cn/guide/topics/media-apps/video-app/building-a-video-app.html

典型的视频播放器在运行时总是显示其控件和视频内容; 它不能在后台运行或没有UI。 因此,将您的应用程序构建为包含用户界面,播放器,媒体会话和媒体控制器的单个Activity是适当的:

建立一个视频播放器Activity

如何创建包含媒体会话和媒体控制器的Activity

Activity接收到onCreate()生命周期回调方法时,它应该执行这些步骤:

  • 创建并初始化媒体会话
  • 设置媒体会话回调
  • 将媒体会话的媒体按钮接收器设置为空,以便媒体按钮事件在不可见时不会重新启动播放器。 这仅影响Android 5.0(API级别21)和更高级的设备。
  • 创建并初始化媒体控制器

下面的onCreate()代码演示了这些步骤:

MediaSessionCompat mMediaSession;
PlaybackStateCompat.Builder mStateBuilder;

@Override
public void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);

  // Create a MediaSessionCompat
  mMediaSession = new MediaSessionCompat(this, LOG_TAG);

  // Enable callbacks from MediaButtons and TransportControls
  mMediaSession.setFlags(
    MediaSessionCompat.FLAG_HANDLES_MEDIA_BUTTONS |
    MediaSessionCompat.FLAG_HANDLES_TRANSPORT_CONTROLS);

  // Do not let MediaButtons restart the player when the app is not visible
  mMediaSession.setMediaButtonReceiver(null);

  // Set an initial PlaybackState with ACTION_PLAY, so media buttons can start the player
  mStateBuilder = new PlaybackStateCompat.Builder()
                .setActions(
                    PlaybackStateCompat.ACTION_PLAY |
                    PlaybackStateCompat.ACTION_PLAY_PAUSE);
  mMediaSession.setState(mStateBuilder.build());

  // MySessionCallback has methods that handle callbacks from a media controller
  mMediaSession.setCallback(new MySessionCallback());

  // Create a MediaControllerCompat
  MediaControllerCompat mediaController =
    new MediaControllerCompat(this, mMediaSession);

  MediaControllerCompat.setMediaController(this, mediaController);
}

当应用程序关闭时,Activity会连续收到onPause()和onStop()回调。 如果播放器正在播放,则必须在Activity消失之前将其停止。 选择使用哪个回调取决于您正在运行的Android版本。

在Android 6.0(API级别23)及更早版本中,不能保证何时调用onStop()。 你的Activity消失后可能会被调用5秒。 因此,在7.0之前的Android版本中,您的应用应该在onPause()停止播放。 在Android 7.0及更高版本中,只要Activity不可见,系统就会调用onStop(),所以这不成问题。
总结:

  • 在Android 6.0及更早版本中,在onPause()回调中停止播放器。
  • 在Android版本7.0和更高版本中,停止播放器的onStop()回调。当活动收到onDestroy()回调时,它应该释放并清理你的播放器。

MediaSession回调

介绍媒体会话回调方法如何管理媒体会话和其他应用程序组件,如通知和广播接收器。
由于视频应用在相同的Activity中运行其媒体会话和媒体控制器,因此媒体会话回调与音频应用服务器/客户端体系结构所示的实现不同。 没有服务调用,通知通过NotificationManager处理。 下表显示了如何在每个回调方法中控制各种功能:


onPlay()
onPause() onStop()
Audio Focus requestFocus() passing in your OnAudioFocusChangeListener.
Always call requestFocus() first, proceed only if focus is granted.
  abandonAudioFocus()
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 Show notification Update notification
注意:如果您使用必要的回叫功能创建MediaSession,那么使用Google智能助理的用户可以使用语音命令来控制您的应用。 这些要求在Google智能助理文档中进行了解释。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值