目录
前言
上一篇跟了一下《》但这里只是介绍了启动,很多方法都没涉及,因此今天就简单的通过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]日志最后一个即可。
参考文章
© 版权声明
大家不用看,写得有点乱。