很多同学,在学习安卓的时候,可能会完成一个音乐播放器的项目,因为音乐播放器项目会贯穿安卓的四大组件。在项目中,大家一定会在服务中使用MediaPlayer去播放音乐,但是界面如何控制服务进行音乐的更换、改变播放进度,大家往往会使用发送广播的方式去通知服务,同时,服务可以发送广播通知界面播放进度的变化。
这时候问题来了:
1.你喜欢在广播接受者中完成解析数据变为指令的代码吗?
2.你觉得用广播高效吗?
当然,你可以通过binder做为服务的代理来进行通讯,但是对于服务和界面的同步则又略显捉急。(如果做过音乐播放器的同学当然知道我在说些什么)
在安卓5中,谷歌推出了MediaSession框架专门解决媒体播放时界面和服务通讯问题。
要理解MediaSession框架,分别看看Media和Session:首先Media是媒体的意思,也就是说这个框架用于音视频媒体;而Session呢,翻译成中文就是会话的意思。一个会话,肯定是涉及两方或以上;在MediaSession框架中,有受控端(一个)和控制端(可以有多个)。接下来为了保证受控端和控制端不串号(想象一个遥控器可以遥控同一型号的多台电视),就有了SessionToken的概念,相当于我们在连接蓝牙设备时的配对码,这样就保证了不串号。在MediaSession框架中,最重要的三个类的概念就这么多,接下来我们一起看看如何使用MediSession框架。
先放一张框架示意图:
上图你看了可能会丈二和尚摸不清头脑,请耐心地看下面的内容,一会回来看,你会觉得更加清晰了。
框架的主要类: