淮安百度网站建设电子商务网站设计实验报告
2026/6/9 18:34:24 网站建设 项目流程
淮安百度网站建设,电子商务网站设计实验报告,公司logo设计大全 效果图,知道一个网站怎么知道是谁做的百度优化一、框架1. MediaSession (媒体会话) • 角色#xff1a; 核心枢纽和状态机。它是整个媒体播放控制的核心。 • 作用#xff1a; 封装播放状态#xff1a; 持有当前播放状态#xff08;如播放/暂停、当前播放位置、播放速度、播放队列、当前媒体项元数据等#xff09;…一、框架1. MediaSession (媒体会话)• 角色 核心枢纽和状态机。它是整个媒体播放控制的核心。• 作用封装播放状态 持有当前播放状态如播放/暂停、当前播放位置、播放速度、播放队列、当前媒体项元数据等。 暴露控制接口 通过 setCallback()设置一个 MediaSession.Callback。这个回调定义了如何处理来自外部的控制命令如 onPlay(), onPause(), onSkipToNext(), onSeekTo()等。应用的后台播放逻辑主要实现在这里。 分发状态更新 当播放状态发生变化如开始播放、暂停、切歌、进度更新时MediaSession 会主动通知所有连接到它的 MediaController。 提供令牌(Token) 生成一个 MediaSession.Token。这个 Token 是 MediaSession的唯一标识符和安全凭证用于前台组件通过 MediaBrowser连接到后台服务并获取 MediaController。• 位置 通常由后台服务MediaBrowserService创建并持有。• 关键点 它不直接处理媒体播放而是定义接口和保存状态具体的播放动作由 MediaSession.Callback 的实现者你的播放逻辑完成。2. MediaBrowserService (媒体浏览器服务)• 角色 后台服务的基类。它是长期运行在后台通常在一个独立的进程的服务负责管理媒体内容库、播放逻辑以及与前台 UI 的连接。• 作用生命周期管理 作为 Android Service它可以在 UI 不可见时如应用退到后台、锁屏继续运行保证播放不中断。 托管 MediaSession 创建并持有 MediaSession 实例实现其 Callback 中的播放控制逻辑。 管理内容库 实现 onLoadChildren()等方法向连接的客户端MediaBrowser提供媒体内容的结构如专辑列表、歌曲列表。 连接点 提供 onGetRoot()方法验证请求连接的客户端MediaBrowser是否有权限并返回一个 BrowserRoot 对象通常包含 MediaSession 的 Token。这是前台连接后台的入口。 管理客户端连接 维护连接到它的 MediaBrowser 客户端列表。• 位置 后台服务继承自 Service。• 关键点 它是后台播放逻辑的容器和连接桥梁。它创建 MediaSession 并实现其核心播放逻辑。3. MediaBrowser (媒体浏览器)• 角色 前台 UI 的连接器。由前台组件如 Activity、Fragment创建和使用。• 作用连接到 MediaBrowserService 使用 MediaBrowserService 的组件名或通过 MediaSession.Token发起连接请求。 获取会话令牌 连接成功后通过 getSessionToken()方法获取到 MediaBrowserService 所持有的 MediaSession 的 Token。 浏览媒体内容 使用 subscribe()方法订阅媒体内容树如“所有歌曲”、“按艺术家”的更新并通过 MediaBrowser.SubscriptionCallback 接收内容MediaItem 列表。使用 unsubscribe()取消订阅。 断开连接 在 UI 销毁时断开与服务的连接。• 位置 前台 UI 组件Activity/Fragment。• 关键点 它主要负责建立连接和获取内容结构。它本身不直接控制播放。获取到 MediaSession.Token 后它的主要任务就完成了用于创建 MediaController。4. MediaController (媒体控制器)• 角色 前台 UI 的控制代理和状态接收器。• 作用创建 前台 UI 组件使用 MediaBrowser 连接成功后获取到的 MediaSession.Token通过 MediaControllerCompat.getMediaController()或 MediaControllerCompat 的构造函数创建 MediaController。 发送控制命令 提供方法如 getTransportControls().play(), pause(), skipToNext(), seekTo()让 UI 发送播放控制命令。这些命令最终会被路由到后台 MediaSession 的 Callback 中执行。 获取当前状态 提供方法如 getPlaybackState(), getMetadata()让 UI 查询当前的播放状态和媒体元数据。 接收状态更新 通过注册 MediaController.CallbackUI 可以监听 MediaSession 的状态变化如播放状态改变、元数据更新、队列变化。当后台状态变化时MediaSession 会通知所有关联的 MediaController这些 MediaController 再回调其注册的 Callback 通知 UI 更新。 与 MediaSession 交互 它是前台 UI 与后台 MediaSession 交互的主要通道。• 位置 前台 UI 组件Activity/Fragment通常与 MediaBrowser 在同一组件中使用。• 关键点 它是 UI 控制播放和获取状态更新的主要工具。它通过 MediaSession.Token 与后台的 MediaSession 建立联系。5.关系和工作流程后台启动 你的应用启动后台服务继承自 MediaBrowserService。该服务在 onCreate() 中创建 MediaSession设置其 Callback实现播放逻辑并可能开始准备播放。前台启动 用户打开应用 UIActivity/Fragment。连接 UI 创建 MediaBrowser 对象使用 MediaBrowserService 的组件名调用 connect() 尝试连接。验证与连接 MediaBrowserService 的 onGetRoot() 被调用验证客户端权限并返回 BrowserRoot包含 MediaSession.Token。连接成功。获取控制器 UI 的 MediaBrowser.ConnectionCallback.onConnected() 被调用。在这里UI 通过 MediaBrowser.getSessionToken() 获取 MediaSession.Token并用它创建 MediaController。浏览内容 (可选) UI 可以使用 MediaBrowser.subscribe() 请求媒体内容结构如显示歌曲列表。控制播放 当用户点击 UI 上的播放按钮时UI 调用 MediaController.getTransportControls().play()。命令路由 MediaController 将 play() 命令发送给后台的 MediaSession。执行命令 MediaSession 调用其 Callback.onPlay() 方法。你在这里实现的后台播放逻辑开始执行例如开始播放音乐。状态更新 播放开始后后台逻辑在 Callback.onPlay() 中更新 MediaSession 的状态例如设置播放状态为 PlaybackState.STATE_PLAYING。状态分发 MediaSession 自动将新的播放状态广播给所有连接的 MediaController。UI 更新 UI 的 MediaController 收到状态更新触发其注册的 MediaController.Callback.onPlaybackStateChanged()。UI 在这里更新界面如将按钮图标改为暂停图标更新进度条。断开 当 UI 销毁时它调用 MediaController.unregisterCallback() 和 MediaBrowser.disconnect() 进行清理。注意点• MediaSession: 核心状态和控制接口。定义“能做什么”Callback和“当前状态是什么”。• MediaBrowserService: 后台服务的基类。托管 MediaSession实现播放逻辑管理内容库处理客户端连接。• MediaBrowser: 前台连接器。负责连接到 MediaBrowserService 并获取 MediaSession.Token用于创建 MediaController和浏览内容。• MediaController: 前台代理。利用 MediaSession.Token 与后台 MediaSession 通信发送控制命令并接收状态更新驱动 UI 变化。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询