MediaSessionCompat

允许与媒体控制器、音量键、媒体按钮和传输控件进行交互。

当应用程序想要发布媒体回放信息或处理媒体键时,应该创建MediaSession。一般来说,一个应用程序只需要一个会话来进行所有的播放,尽管可以创建多个会话来提供更精细的媒体控制。

一旦创建了会话,会话的所有者可以将其会话令牌传递给其他进程,以允许它们创建一个MediaControllerCompat来与会话交互。

为了接收命令、媒体键和其他事件, MediaSessionCompat.Callback必须被设置,通过setCallback(Callback)

当一个应用程序完成播放时,它必须调用release()来清理会话并通知任何控制器。

MediaSessionCompat对象不是线程安全的,所有调用都应该来自同一个线程。

这是在API级别4之后以向后兼容的方式引入的一个访问MediaSession特性的助手。

Constants

ACTION_FLAG_AS_INAPPROPRIATE

预定义的自定义动作,将当前播放的媒体标记为不适当的。

ACTION_FOLLOW

预定义的自定义动作跟随艺术家,专辑,或播放列表。额外的bundle必须有ARGUMENT_MEDIA_ATTRIBUTE来指示follow操作的类型。这个bundle还可以有一个可选的字符串参数ARGUMENT_MEDIA_ATTRIBUTE_VALUE,用来指定要追随的目标(例如,要追随的艺术家的名字)。如果省略此参数,则当前播放的媒体将成为操作的目标。因此,会话必须对当前元数据执行以下操作。如果当前元数据中没有指定的属性,则控制器不能忽略该参数。

ACTION_SKIP_AD

预定义的自定义动作跳过广告,目前正在播放。

ACTION_UNFOLLOW

预定义的自定义动作取消跟踪艺术家,专辑,或播放列表。额外的bundle必须有ARGUMENT_MEDIA_ATTRIBUTE来指示unfollow操作的类型。bundle还可以有一个可选的字符串参数ARGUMENT_MEDIA_ATTRIBUTE_VALUE,用来指定要取消follow的目标(例如,要取消follow的艺术家的名字)。如果省略此参数,则当前播放的媒体将成为操作的目标。因此,会话必须对当前元数据执行unfollow操作。如果当前元数据中没有指定的属性,则控制器不能忽略该参数。

ARGUMENT_MEDIA_ATTRIBUTE

参数来指示媒体属性。它应该是以下其中之一:

ARGUMENT_MEDIA_ATTRIBUTE_VALUE

字符串参数,表示媒体属性的值(例如,艺术家的名字)。

FLAG_HANDLES_MEDIA_BUTTONS

在会话上设置此标志以指示它可以处理媒体按钮事件。废弃了

FLAG_HANDLES_QUEUE_COMMANDS

在会话上设置此标志,以指示它通过其MediaSessionCompat.Callback处理队列管理命令。

FLAG_HANDLES_TRANSPORT_CONTROLS

在会话上设置这个标志来指示它通过它的MediaSessionCompat.Callback来处理传输控制命令。废弃

MEDIA_ATTRIBUTE_ALBUM

ARGUMENT_MEDIA_ATTRIBUTE的值,表示专辑。

MEDIA_ATTRIBUTE_ARTIST

ARGUMENT_MEDIA_ATTRIBUTE的值表示艺术家。

MEDIA_ATTRIBUTE_PLAYLIST

ARGUMENT_MEDIA_ATTRIBUTE的值指示播放列表。

Public constructors

public MediaSessionCompat (Context context, String tag)

public MediaSessionCompat (Context context,
  String tag,
  ComponentName mbrComponent,
  PendingIntent mbrIntent)

public MediaSessionCompat (Context context,
  String tag,
  ComponentName mbrComponent,
  PendingIntent mbrIntent,
  Bundle sessionInfo)

Public methods

addOnActiveChangeListener

public void addOnActiveChangeListener (MediaSessionCompat.OnActiveChangeListener listener)

添加一个侦听器,当会话的活动状态改变时,将通知该侦听器。这主要是由支持库使用,应用程序不应该需要。

fromMediaSession

public static MediaSessionCompat fromMediaSession (Context context, Object mediaSession)

从框架MediaSession对象创建一个实例。

此方法仅支持API 21+。在API 20及以下,它返回null。

注意:从这个方法返回的MediaSessionCompat对象可能不会提供MediaSessionCompat的全部功能,直到设置一个新的MediaSessionCompat. callback。为了避免这种情况,当需要一个MediaSessionCompat和一个框架MediaSession时,建议首先创建一个MediaSessionCompat,然后通过getMediaSession()获得框架会话。

getController

public MediaControllerCompat getController ()

获取此会话的控制器。这是一种方便的方法,可以避免在进程中缓存自己的控制器。

getCurrentControllerInfo

public final MediaSessionManager.RemoteUserInfo getCurrentControllerInfo ()

获取发送当前请求的控制器信息。

注意:这只在请求回调时有效,如MediaSessionCompat.Callback.onPlay()。

注意:从API 21到23,这个方法返回一个假的MediaSessionManager.RemoteUserInfo,取值如下:
包名为MediaSessionManager.RemoteUserInfo.LEGACY_CONTROLLER。
PID和UID的值为负值。

注意:从API 24到27,MediaSessionManager。从这个方法返回的RemoteUserInfo将具有负的uid和pid。在大多数情况下,它将具有正确的包名,但有时它将无法获得正确的包名。

getMediaSession

public Object getMediaSession ()

获取基础框架MediaSession对象。

此方法仅支持API 21+。

getRemoteControlClient

public Object getRemoteControlClient ()

getSessionToken

public MediaSessionCompat.Token getSessionToken ()

检索一个令牌对象,应用程序可以使用它来创建一个MediaControllerCompat来与这个会话进行交互。会话的所有者负责决定如何分发这些令牌。

在Build.VERSION_CODES之前的平台版本上。LOLLIPOP这个令牌只能在你的应用程序中使用,因为没有办法保证其他应用程序使用相同版本的支持库。

未完待续

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,029评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,395评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,570评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,535评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,650评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,850评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,006评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,747评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,207评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,536评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,683评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,342评论 4 330
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,964评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,772评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,004评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,401评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,566评论 2 349

推荐阅读更多精彩内容