目录
前言
上一篇跟了一下《》但这里只是介绍了启动,很多方法都没涉及,因此今天就简单的通过MediaSession的使用去了解进一步跟一下MediaSessionService的源码。
记录一下,方便自己查阅。
流水账,随意记录而已。
正文
之前有介绍过《》,我们就从中摘录一下MediaSession的使用,然后开始跟进源码。
- MediaSession mMediaSession = new MediaSession(MusicApp.getContext(), TAG);
- mMediaSession.setCallback(mediaSessionCallback);
-
- private final MediaSession.Callback mediaSessionCallback = new MediaSession.Callback() {
- //略
- }
MediaSession.java
- frameworks\base\media\java\android\media\session\MediaSession.java
上面初始化对象时用的构造函数
MediaSession()
- public MediaSession(@NonNull Context context, @NonNull String tag) {
- this(context, tag, null);
- }
调用的是3个参数的构造函数
MediaSession()
- public MediaSession(@NonNull Context context, @NonNull String tag,
- @Nullable Bundle sessionInfo) {
- //略
- //初始化MediaSessionManager
- MediaSessionManager manager = (MediaSessionManager) context
- .getSystemService(Context.MEDIA_SESSION_SERVICE);
- try {
- //创建Binder
- mBinder = manager.createSession(mCbStub, tag, sessionInfo);
- mSessionToken = new Token(Process.myUid(), mBinder.getController());
- //创建MediaController对象
- mController = new MediaController(context, mSessionToken);
- } catch (RemoteException e) {
- throw new RuntimeException("Remote error creating session.", e);
- }
- }
这重点的有
MediaSessionManager
mBinder
MediaController [这个暂时不关注]
MediaSessionService.java
FullUserRecord是在MediaSessionService中定义的。
FullUserRecord.onMediaButtonSessionChanged()
- @Override
- public void onMediaButtonSessionChanged(MediaSessionRecordImpl oldMediaButtonSession,
- MediaSessionRecordImpl newMediaButtonSession) {
- synchronized (mLock) {
- if (oldMediaButtonSession != null) {
- mHandler.postSessionsChanged(oldMediaButtonSession);
- }
- if (newMediaButtonSession != null) {
- //保存MediaButton的接收者
- rememberMediaButtonReceiverLocked(newMediaButtonSession);
- mHandler.postSessionsChanged(newMediaButtonSession);
- }
- pushAddressedPlayerChangedLocked();
- }
- }
这里即使通知新和旧的MediaButtonSession变化。
一般日志都有相关打印
- Media button session is changed to com.biumall.video/VideoApp_MusicService (userId=0)
- Media button session is changed to com.biumall.music/MusicApp_MusicService (userId=0)
暂时先跟到这,后续根据app继续分析。
要判断哪个接收MediaButton,看[Media button session is changed]日志最后一个即可。
参考文章
© 版权声明
大家不用看,写得有点乱。