- 1、本文档共7页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Android_MediaSession框架介绍
Android:MediaSession框架介绍介绍很多同学,在学习安卓的时候,可能会完成一个音乐播放器的项目,因为音乐播放器项目会贯穿安卓的四大组件。在项目中,大家一定会在服务中使用MediaPlayer去播放音乐,但是界面如何控制服务进行音乐的更换、改变播放进度,大家往往会使用发送广播的方式去通知服务,同时,服务可以发送广播通知界面播放进度的变化。 (更多Java/Android:239292114)这时候问题来了:1你喜欢在广播接受者中完成解析数据变为指令的代码吗?2你觉得用广播高效吗?当然,你可以通过binder做为服务的代理来进行通讯,但是对于服务和界面的同步则又略显捉急。(如果做过音乐播放器的同学当然知道我在说些什么)在安卓5中,谷歌推出了MediaSession框架专门解决媒体播放时界面和服务通讯问题。要理解MediaSession框架,分别看看Media和Session:首先Media是媒体的意思,也就是说这个框架用于音视频媒体;而Session呢,翻译成中文就是会话的意思。一个会话,肯定是涉及两方或以上;在MediaSession框架中,有受控端(一个)和控制端(可以有多个)。接下来为了保证受控端和控制端不串号(想象一个遥控器可以遥控同一型号的多台电视),就有了SessionToken的概念,相当于我们在连接蓝牙设备时的配对码,这样就保证了不串号。在MediaSession框架中,最重要的三个类的概念就这么多,接下来我们一起看看如何使用MediSession框架。先放一张框架示意图:上图你看了可能会丈二和尚摸不清头脑,请耐心地看下面的内容,一会回来看,你会觉得更加清晰了。框架的主要类:类概念android.media.session.MediaSession受控端android.media.session.MediaSession.Token配对密钥android.media.session.MediaController控制端android.media.session.MediaSession.Callback受控端回调,可以接受到控制端的指令android.media.session.MediaController.TransportControls控制端的遥控器,用于发送指令android.media.session.MediaController.Callback控制端回调,可以接受到受控端的状态一、基本框架搭建1:在服务中通过new MediaSession( Context, String)构造出MediaSession,其中字符串可以传入包名(或任意)2:在服务中调用mediaSession.getSessionToken获得Token对象3:通过IBinder把Token传递给绑定服务的Activity4:在Activity中绑定服务,拿到Token对象,并调用MediaController(Context, MediaSession.Token)获得MediaController对象二、设备上的音乐加载以上就完成了MediaSession框架的搭建。接下来就开始使用这个框架了。接下来我们看看如何使用框架去完成音乐列表加载。服务中通过MediaStore内容提供者查询设备上的音乐得到Cursor对象遍历Cursor把查询的结果封装到ListMediaMetadata集合中MediaMetadata可以看作是一个map集合,键是String(需要MediaMetadata上的常量),值是音乐名称、歌手、时常等信息把ListMediaMetadata转化成ListMediaSession.QueueItemQueueItem和MediaMetadata是什么关系呢?QueueItem在构造的时候,需要MediaDescription,而MediaDescription可以通过MediaMetadata获得。在构造QueueItem时,注意id不重复。服务中的MediaSession调用setQueue(ListMediaSession.QueueItem)方法,来告知整个框架的各方,目前有哪些音乐可以播放。界面上可以通过MediaController的getQueue方法获得播放列表(ListMediaSession.QueueItem)。当然了因为服务对音乐列表的查询封装会需要一些时间,那也可以给调用mediaController.registerCallback(MediaController.Callback) 给mediaController注册一个监听,每当受控端调用了setQueue方法,所有的回调的onQueueChanged(ListMediaSession.QueueItem)都
文档评论(0)