当前位置: 首页 > news >正文

网站建设梦幻创意合适的网站建设明细报价表

网站建设梦幻创意,合适的网站建设明细报价表,wordpress嵌入视频播放,江阴做网站文章目录 前言MediaSessionCarMediaService作用是什么#xff1f;提供了哪些接口#xff1f;如何使用#xff1f;CarMediaService的实现总结 前言 CarMediaService 是AAOS中统一管理媒体播放控制、信息显示和用户交互等功能的服务。这一服务依赖于android MediaSession框架… 文章目录 前言MediaSessionCarMediaService作用是什么提供了哪些接口如何使用CarMediaService的实现总结 前言 CarMediaService 是AAOS中统一管理媒体播放控制、信息显示和用户交互等功能的服务。这一服务依赖于android MediaSession框架。 所以首先需要简单的了解一下MediaSession。 MediaSession MediaSession 框架规范了音视频应用中界面与播放器之间的通信接口实现界面与播放器之间的完全解耦。MediaSession 框架定义了媒体会话和媒体控制器两个重要的类它们为构建多媒体播放器应用提供了一个完善的技术架构。 AAOS上面的MediaSession的控制框图如上主要是MediaControl和MediaSession两个类直接的交互。 MediaControl是UI端控制Service端的类在AAOS中所有的app播放控制客户端的实现都是carMediaApp中MediaControl的实现的包括蓝牙audio localplayer界面中暂停播放下一首 上一首等等。 MediaSession是服务端 这个服务端包括蓝牙的src\com\android\bluetooth和/apps/Car/LocalMediaPlayer。这这里面实现了Mediassion 的callback 用来响应client 端UI的控制。 而响应之后的状态改变可以通过继承MediaControl的callback 在客户端实现。 CarMediaService 作用是什么提供了哪些接口如何使用 用途 CarMediaService通过CarMediaManager给外部应用提供使用的API。 这些api允许开发者控制车辆中的主要媒体源以及获取与这一媒体源相关的更新信息。通过这个 API 来实现媒体播放控制、信息显示和用户交互等功能。 接口 CarMediaManger是客户端 通过AIDL的接口 调用到CarMediaService中。 提供的AIDIL的接口如下 获取/设置提供模式下当前活动的媒体源。 其中模式包括播放和浏览 是指应用的操作可以是浏览媒体 或者是操作播放媒体。 其中MediaSource的理解可以认为是执行具体播放操作的一个应用 是媒体播放控制的对象比如蓝牙音乐播放器、本地的播放器等等。注册/反注册回调监听媒体活动源的更新。同样模式可以是浏览或者播放。 综上可以看到carMediaService 是实现所有媒体相关的ui 浏览和控制的统一管理。 监听媒体源的变化控制活动和非活动媒体源的播放、退出、暂停等等。 interface ICarMedia {/** Gets the currently active media source for the provided mode */ComponentName getMediaSource(int mode);/** Sets the currently active media source for the provided mode */void setMediaSource(in ComponentName mediaSource, int mode);/** Register a callback that receives updates to the active media source */void registerMediaSourceListener(in ICarMediaSourceListener callback, int mode);/** Unregister a callback that receives updates to the active media source */void unregisterMediaSourceListener(in ICarMediaSourceListener callback, int mode);/** Retrieve a list of media sources, ordered by most recently used */ListComponentName getLastMediaSources(int mode);/** Returns whether the browse and playback sources can be changed independently. */boolean isIndependentPlaybackConfig();/** Sets whether the browse and playback sources can be changed independently. */void setIndependentPlaybackConfig(boolean independent); }使用流程 首先获取CarMediaManager然后注册MediaSource变化的监听在mediasource有变化的时候更新ui。 mHandler new Handler(application.getMainLooper());mMediaSourceListener componentName - mHandler.post(() - updateModelState(mInputFactory.getMediaSource(componentName)));try {mCarMediaManager mInputFactory.getCarMediaManager(mCar);mCarMediaManager.addMediaSourceListener(mMediaSourceListener, mode);MediaSource src mInputFactory.getMediaSource(mCarMediaManager.getMediaSource(mode));if (Log.isLoggable(TAG, Log.INFO)) {Log.i(TAG, Initializing with src);}updateModelState(src);} catch (CarNotConnectedException e) {Log.e(TAG, Car not connected, e);}CarMediaService的实现 carMediaService中初始化流程 获取mPrimaryMediaComponents 获取的方式是通过遍历系统的所有package、然后查看有MediaBroswerService的package。 在AAOS 默认Bluetooth有MediaBroswerService所以默认的package是com.android.bluetooth。 private ComponentName getMediaService(NonNull ComponentName componentName) {String packageName componentName.getPackageName();String className componentName.getClassName();PackageManager packageManager mContext.getPackageManager();Intent mediaIntent new Intent();mediaIntent.setPackage(packageName);mediaIntent.setAction(MediaBrowserService.SERVICE_INTERFACE);ListResolveInfo mediaServices packageManager.queryIntentServicesAsUser(mediaIntent,PackageManager.GET_RESOLVED_FILTER, ActivityManager.getCurrentUser());for (ResolveInfo service : mediaServices) {String serviceName service.serviceInfo.name;if (!TextUtils.isEmpty(serviceName)// If className is not specified, returns the first service in the package;// otherwise returns the matched service.// TODO(b/136274456): find a proper way to handle the case where there are// multiple services and the className is not specified. (TextUtils.isEmpty(className) || serviceName.equals(className))) {return new ComponentName(packageName, serviceName);}}}注册MediaSessionActive的回调 当服务端的MediaSession 设置为active的时候回调到这个SessionChangedListener中 启动MediaConnectService MediaConnectorService会调用MediaConnectorService的onStartCommand。 onStartCommand中会获取当前应用的MediaControl设置到PlaybackViewModel。 PlaybackViewModel利用这个control对MediaSession的service端进行控制。 控制是在service端实现mediaControl的onPrepare、onPlay等实现的。 如果MediaSession当前是播放的状态那么会stop掉。如果不是的话 会先进行prepare操作。 private void initUser(UserIdInt int userId) {mPrimaryMediaComponents[MEDIA_SOURCE_MODE_PLAYBACK] isCurrentUserEphemeral()? getDefaultMediaSource() : getLastMediaSource(MEDIA_SOURCE_MODE_PLAYBACK);mPrimaryMediaComponents[MEDIA_SOURCE_MODE_BROWSE] isCurrentUserEphemeral()? getDefaultMediaSource() : getLastMediaSource(MEDIA_SOURCE_MODE_BROWSE);mActiveUserMediaController null;updateMediaSessionCallbackForCurrentUser();notifyListeners(MEDIA_SOURCE_MODE_PLAYBACK);notifyListeners(MEDIA_SOURCE_MODE_BROWSE);startMediaConnectorService(shouldStartPlayback(mPlayOnBootConfig), currentUser);}} SessionChanged 的回调 SessionChanged回调到onActiveSessionsChanged。回调的参数是所有active的mediaControl。这里面会遍历所有control如果control的状态是playing 并且其MediaSource跟当前存储的PrimaryMediaSource不一样的话 会更新control的MediaSource到PrimaryMediaSource。 private class SessionChangedListener implements OnActiveSessionsChangedListener {Overridepublic void onActiveSessionsChanged(ListMediaController controllers) {if (ActivityManager.getCurrentUser() ! mCurrentUser) {Slog.e(CarLog.TAG_MEDIA, Active session callback for old user: mCurrentUser);return;}mMediaSessionUpdater.registerCallbacks(controllers);}}MediaController的回调 这个会回调到onPlaybackStateChanged回调的状态是playing而且跟回调之前的状态不一样的时候 也会调用setPrimaryMediaSource进行primary mediasource的更新。 public void onPlaybackStateChanged(Nullable PlaybackState state) {if (state.getState() PlaybackState.STATE_PLAYING state.getState() ! mPreviousPlaybackState) {ComponentName mediaSource getMediaSource(mMediaController.getPackageName(),getClassName(mMediaController));if (mediaSource ! null) {setPrimaryMediaSource(mediaSource, MEDIA_SOURCE_MODE_PLAYBACK);}}mPreviousPlaybackState state.getState();}}总结 CarMediaService 的实现是通过注册MediaSessionActive 和 MediaController的callback 来监听当前用户所有应用 有关媒体播放浏览等事件。当事件发生时 更新AAOS界面的信息和控制的控件。
http://www.hkea.cn/news/14477628/

相关文章:

  • 网站有可能搜不到吗做设计在哪个网站找图片大全
  • 安做省民改厅网站outstock. wordpress
  • 建筑必看六个网站电商付费推广方式
  • app设计网站模板电子商务网站建设属性
  • 工程建设造价信息网站企业网站建设费用怎么做账
  • 哪些网站做的比较好的青岛博采网络
  • 网站文件夹没有权限设置wordpress主题zhixina
  • 服装企业网站建设的目的北京价格网
  • 盛唐网站建设北京市市场监督管理网上服务平台
  • 关于公司网站建设情况的汇报wordpress制作rss
  • 寻网站开发人员合作企业邮箱忘记密码怎么找回
  • 浙江省职业建设学院官方网站什么网站可以做章
  • 做写字楼租赁用什么网站好怎样弄免费网站
  • 网站怎么进行优化排名ui设计的尺寸
  • 一级域名免费网站怎么申请东莞市常平东部中心医院
  • 网站怎么做框架集建设企业网站用动态还是静态
  • 建网站需要什么技术中医院网站源码
  • ps怎么做网站wordpress c
  • 福州网站排名提升万联芯城网站建设
  • 福建省龙岩市新罗区建设局网站浙江建设网官网
  • 深圳建站公司告诉你十个建站步骤注册资金100万的公司要多少钱
  • 江津做网站做网站的都改行做什么了
  • 比较好的外贸网站一个服务器可以备案几个网站
  • 冠县做网站哪里好wordpress主机空间选择
  • 网站付费模板淘宝指数查询入口
  • 汕尾营销网站建设wordpress 编辑图片
  • wordpress 提高速度系统优化软件推荐
  • 做网站设计挣钱吗株洲网红
  • 体育网站建设规划天水头条最新消息今天
  • wordpress 站库分离个人如何制作网站