Android媒体应用(五)--构建视频应用程序
来源:互联网 发布:淘宝产品ps调色 编辑:程序博客网 时间:2024/06/11 03:59
原文地址: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;@Overridepublic 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 SessionsetActive(true)
- Update metadata and state- Update metadata and state
setActive(false)
- Update metadata and state
Player ImplementationStart the playerPause the playerStop the playerBecoming NoisyRegister yourBroadcastReceiver
Unregister your BroadcastReceiver
NotificationsShow notificationUpdate notification注意:如果您使用必要的回叫功能创建MediaSession,那么使用Google智能助理的用户可以使用语音命令来控制您的应用。 这些要求在Google智能助理文档中进行了解释。阅读全文
0 0
- Android媒体应用(五)--构建视频应用程序
- Android媒体应用(四)--构建音频应用程序
- Android媒体应用(一)
- Android媒体播放---Media playback(五)
- Android API Guide for Media Apps(五)——构建媒体浏览客户端(Building a Media Browser Client)
- Android媒体应用(三)--使用媒体会话
- Android媒体应用(六)--响应媒体按钮
- Android媒体应用(二)--综述
- Android应用程序组件(五)
- Android应用程序用户界面(五)
- ios媒体视频播放器应用项目
- iOS媒体视频播放器应用源码
- 媒体视频播放器应用源码
- Spring学习笔记(五) 构建Spring Web应用程序
- 【媒体应用:Android平台Vitamio播放器探索之路系列】之五:Vitamio API:activity
- Android应用程序(APK)的构建过程
- Android媒体相关开发应用程序接口
- 【译文】 Android媒体相关开发应用程序接口
- Android媒体应用(四)--构建音频应用程序
- 【Unity3d每日一记】背景图随文本内容拉伸
- 在IDEA中实战Git-branch入门
- NDK编译c包含C++头文件 error: unknown type name 'class' 的解决方法
- JVM(三):类加载机制(类加载过程和类加载器)
- Android媒体应用(五)--构建视频应用程序
- SSM在使用mapper接口时出现提示错误
- 一位全加器进位输出Ci+1的时间延迟为什么是2T?
- syslogd
- orcle数据库存储过程和存储函数初学总结
- Myeclipse Professional 2014使用软件获取激活码的方法
- flume开发-自定义拦截器(Interceptor)
- linux 设备文件名和挂载
- jvm的基本结构