Android Docs


android.support.v4.media.session.MediaControllerCompat 类

属于 media.session 包下。

允许应用与正在进行的媒体会话进行互动。

方法名 参数 描述 返回值
getMetadata 获取此会话的当前元数据。 返回MediadataCompat类
getSessionActivity 获得与启动会话关联的用户界面的意图(如果存在的话) PendingIntent意图或者null

playFromMediaId

请求播放器开始播放一个特定的URI连接

@param mediaId 请求媒体的uri。

@param extras可选附加项,可以包含额外的信息

关于要播放的媒体项目。

public abstract void playFromMediaId(String mediaId, Bundle extras);

android.support.v4.media.session.MediaSessionCompat 类

Allows interaction with media controllers, volume keys, media buttons, and transport controls.

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

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

一旦创建会话,会话的所有者可以将其 session token传递给其他进程,以允许他们创建 MediaControllerCompat与会话进行交互。

要接收命令,媒体密钥和其他事件, MediaSessionCompat.Callback必须使用 setCallback(Callback)进行设置。

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

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

这是帮助您以向后兼容的方式访问API级别4之后引入的 MediaSession功能。

ps:摘自 apiref

构造方法

MediaSessionCompat

MediaSessionCompat(@NonNull context: Context, @NonNull tag: String)

Creates a new session. You must call release() when finished with the session.

创建对象。在完成时要调用release()释放。

参数1:创建Session的上下文

参数2:调试时所用的 tag。

MediaSessionCompat

MediaSessionCompat(@NonNull context: Context, @NonNull tag: String, @Nullable mbrComponent: ComponentName?, @Nullable mbrIntent: PendingIntent?)

Creates a new session with a specified media button receiver (a component name and/or a pending intent). You must call release() when finished with the session.

指定一个媒体接收器来创建对象。在完成时要调用release()释放。

参数1:创建Session的上下文

参数2:调试时所用的 tag。

参数3:指定媒体接收器的名称

参数4:处理媒体按钮事件的接收器组件。可选选项。

setSessionToken

open fun setSessionToken(token: MediaSessionCompat.Token!): Unit

Call to set the media session.

This should be called as soon as possible during the service’s startup. It may only be called once.

呼叫设置媒体会话。

这应该在服务启动期间尽快调用。 它只能被调用一次。

getSessionToken 方法

kotlin中可缩写为“sessionToken”

检索可供应用程序使用的令牌对象,以创建用于与此会话进行交互的MediaControllerCompat

public Token getSessionToken() {
    return mImpl.getSessionToken();
}

setSessionActivity 方法

PendingInten pi:启动到这个会话。

void setSessionActivity (PendingIntent pi)    

为此会话设置启动用户界面的意图。 这可以用作到正在进行的媒体屏幕的快速链接。 意图应该是针对可能使用startActivity(Intent)开始的活动。

setActive 方法

kotlin表示为“isActive”

  • Sets if this session is currently active and ready to receive commands.

    如果此会话当前处于活动状态并准备好接收命令

  • If set to false your session’s controller may not be discoverable.

    如果设置为false,可能无法发现会话的控制器。

  • You must set the session to active before it can start receiving media button events or transport commands.

    在开始接收媒体按钮事件或传输命令之前,必须将会话设置为活动。

open fun setActive(active: Boolean): Unit

android.support.v4.media.session.MediaBrowserService类

媒体浏览器服务

关键类型

  1. MediaBrowserServiceCompat 媒体浏览器服务
  2. MediaBrowserCompat 媒体浏览器
  3. MediaControllerCompat 媒体控制器
  4. MediaSessionCompat 媒体会话

android.support.v4.media.session.MediaBrowserServiceCompat

作用

音乐播放后台服务。

客户端中获取音乐数据的服务,所有的音乐数据都通过该服务与服务端进行交互获取。

该类是Service类的子类,可以作为一个后台服务来使用,它实现后台服务并不能通过自身直接实现,而是通过MediaSessionCompat媒体会话来实现的。在使用过程中会话会与该服务关联起来,所有的播放操作都要给MediaSessionCompat实现。

获得数据时,通过 MediaBrowserServiceCompat 的两个方法来实现控制

@Nullable abstract fun onGetRoot(
    @NonNull clientPackageName: String, 
    clientUid: Int, 
    @Nullable rootHints: Bundle?
): MediaBrowserServiceCompat.BrowserRoot?

调用以获取特定客户端浏览的根信息。

此方法自在服务连接时调用,如果返回一个 rootId为空的BrowserRoot则表示客户端可以连接服务,也可以连接其媒体资源

如果返回null则表示客户端不能连接媒体资源

abstract fun onLoadChildren(
    @NonNull parentId: String, 
    @NonNull result: MediaBrowserServiceCompat.Result<MutableList<MediaBrowserCompat.MediaItem!>!>
): Unit

来获取有关媒体项目的子信息。

此方法中的 parentId 与上面的方法 onGetRoot 中返回的RootId没有关系,客户端连接后,它可以通过重复调用MediaBrowserCompat.subscribe()方法来发起数据请求。而每次调用subscribe()方法都会返回onLoadChildren()回调到该service中,然后返回MediaBrowser.MediaItem()对象列表

每个MediaItem都有唯一的Id字符串,它其实是一个隐式的token。当客户想打开子菜单或者播放item时,它就将ID传入。

android.support.v4.media.session.MediaBrowserServiceCompat.BrowserRoot 抽象类

包含浏览器首次连接客户端的信息。

修饰符 (构造)方法 描述
MediaBrowserServiceCompat.BrowserRoot(String rootId,Bundle extras) rootId:浏览的根ID。extras:浏览器的附加功能。

android.support.v4.media.session.MediaBrowserServiceCompat.Result 类

异步回调方法的完成处理程序

修饰符 方法 描述
void sendResult(T result) 将结果发送给调用者
void detach() 分离线程消息,并允许稍后进行sendResult(T)调用。

android.support.v4.media.session.MediaBrowserCompat

MediaBrowserCompat.MediaItem常量

一个包含单个媒体项目信息的类,用于浏览媒体。

常量

FLAG_PLAYABLE

int FLAG_PLAYABLE

标志:表示该项目可以播放。

FLAG_BROWSABLE

int FLAG_BROWSABLE

标志:表示该项目有其自己的子项。

MediaSessonCompat.Token类

运行中的Token。表示可能会被会话的所有者传递给应用程序,以允许创建一个MediaControllerCompat与会话进行通信。

MediaMetadataCompat 类

包含有关项目的元数据,例如标题,艺术家等

各个常量

类型
string METADATA_KEY_ALBUM媒体专辑标题。
string METADATA_KEY_ALBUM_ART媒体原始资料专辑的作品为 Bitmap
string METADATA_KEY_ALBUM_ARTIST媒体原始资料专辑的艺术家。
string METADATA_KEY_ALBUM_ART_URI作为Uri风格字符串的媒体原始源相册的图片。
string METADATA_KEY_ART媒体作品为 Bitmap
string METADATA_KEY_ARTIST媒体艺术家。
string METADATA_KEY_ART_URI媒体的作品是Uri风格的字符串。
string METADATA_KEY_AUTHOR媒体的作者。
string METADATA_KEY_COMPILATION媒体的编辑状态。
string METADATA_KEY_COMPOSER媒体的作曲家。
string METADATA_KEY_DATE媒体创建或发布的日期。
string METADATA_KEY_DISC_NUMBER媒体原始来源的光盘号码。
string METADATA_KEY_DISPLAY_DESCRIPTION适合向用户显示的说明。
string METADATA_KEY_DISPLAY_ICON适合向用户显示的图标或缩略图。
string METADATA_KEY_DISPLAY_ICON_URI适合向用户显示的图标或缩略图。
string METADATA_KEY_DISPLAY_SUBTITLE适合向用户显示的字幕。
string METADATA_KEY_DISPLAY_TITLE适合向用户显示的标题。
string METADATA_KEY_DURATION媒体的持续时间以毫秒为单位。
string METADATA_KEY_GENRE媒体的流派。
string METADATA_KEY_MEDIA_ID用于识别内容的字符串键。
string METADATA_KEY_NUM_TRACKS媒体原始来源中的曲目数量。
string METADATA_KEY_RATING媒体整体评分。
string METADATA_KEY_TITLE媒体的标题。
string METADATA_KEY_TRACK_NUMBER媒体的曲目号码。
string METADATA_KEY_USER_RATING用户对媒体的评分。
string METADATA_KEY_WRITER媒体的作者。
string METADATA_KEY_YEAR媒体创建或发布的一年。
方法名 参数 描述 返回值
getDescription 为显式,返回次元数据的简单描述 MediaDescriptionCompat!

MediaDescriptionCompat

适合显示的媒体项目的一组简单元数据。 这可以使用Builder创建,也可以使用getDescription()从现有元数据中getDescription()

PlaybackStateCompat 类

存放状态的常量类

类型 描述
long ACTION_FAST_FORWARD表示此会话支持快进命令。
long ACTION_PAUSE表示此会话支持暂停命令。
long ACTION_PLAY表示此会话支持播放命令。
long ACTION_PLAY_FROM_MEDIA_ID表示此会话支持从媒体id命令播放。
long ACTION_PLAY_FROM_SEARCH表示此会话支持来自搜索命令的播放。
long ACTION_PLAY_FROM_URI表示此会话支持来自URI命令的播放。
long ACTION_PLAY_PAUSE表示此会话支持播放/暂停切换命令。
long ACTION_PREPARE表示此会话支持prepare命令。
long ACTION_PREPARE_FROM_MEDIA_ID指示此会话支持从媒体id命令准备。
long ACTION_PREPARE_FROM_SEARCH表示此会话支持从搜索命令准备。
long ACTION_PREPARE_FROM_URI表示此会话支持从URI准备命令。
long ACTION_REWIND表示此会话支持倒带命令。
long ACTION_SEEK_TO表示此会话支持寻求命令。
long ACTION_SET_RATING表示此会话支持set rating命令。
long ACTION_SKIP_TO_NEXT表示此会话支持下一个命令。
long ACTION_SKIP_TO_PREVIOUS指示此会话支持上一个命令。
long ACTION_SKIP_TO_QUEUE_ITEM表示此会话支持跳转到队列项目命令。
long ACTION_STOP表示此会话支持停止命令。
long PLAYBACK_POSITION_UNKNOWN使用此值表示位置未知。
int STATE_BUFFERING指示此项目的状态当前正在缓冲,并且将在足够的数据已经缓冲时开始播放。
int STATE_CONNECTING指示正在进行回放的班级的状态当前正在连接到路线。
int STATE_ERROR指示此项目的状态当前处于错误状态。
int STATE_FAST_FORWARDING指示此项目的状态当前正在快进。
int STATE_NONE这是默认的播放状态,表示尚未添加媒体,或者表演者已重置且没有要播放的内容。
int STATE_PAUSED指示此项目的状态当前已暂停。
int STATE_PLAYING指示此项目正在播放的状态。
int STATE_REWINDING指示此项目的状态当前正在倒带。
int STATE_SKIPPING_TO_NEXT表示玩家正在跳到下一个项目的状态。
int STATE_SKIPPING_TO_PREVIOUS显示玩家当前正在跳到前一个项目的状态。
int STATE_SKIPPING_TO_QUEUE_ITEM指示玩家当前正在跳到队列中特定项目的状态。
int STATE_STOPPED指示此项目的状态当前已停止。

getLastPositionUpdateTime 方法

  • Get the elapsed real time at which position was last updated.

    获取最后一次更新位置的实时时间。

  • If the position has never been set this will return 0;

    如果位置没有被设置,这个将返回0;

fun getLastPositionUpdateTime(): Long

返回值

The last time the position was updated.

最后一次更新位置的时间。

getPosition 方法

Get the playback position in ms at last position update time.

在最后一次位置更新时,以ms为单位获得播放位置。

fun getPosition(): Long

getPlaybackSpeed 方法

  • Get the current playback speed as a multiple of normal playback.

    将当前播放速度设置为正常播放速度的倍数。

  • This should be negative when rewinding.

    当倒带时,这应该是负的。

  • A value of 1 means normal playback and 0 means paused.

    1表示正常播放,0表示暂停。

fun getPlaybackSpeed(): Float

返回值

The current speed of playback.

当前播放速度。

ServiceCompat

Helper用于访问在向后兼容的API级别4之后引入的 Service功能。

com.google.android.material.snackbar 类

Snackbars provide lightweight feedback about an operation.

snackbar提供关于操作的轻量级反馈。

They show a brief message at the bottom of the screen on mobile and lower left on larger devices.

它们会在移动设备的屏幕底部和较大设备的左下方显示一条简短的信息。

make 方法

Make a Snackbar to display a message

制作一个Snackbar来显示一条信息

返回值

Snackbar

public static Snackbar make (
                View view, 
                CharSequence text, 
                int duration)

参数

view:父视图

text:格式化文本

duration:显式消息的时间

  • BaseTransientBottomBar.LENGTH_SHORT
  • BaseTransientBottomBar.LENGTH_LONG
  • BaseTransientBottomBar.LENGTH_INDEFINITE

kotlinx.coroutines.CoroutineScope 接口

Defines a scope for new coroutines.

为新的协程定义作用域。

interface CoroutineScope

kotlinx.coroutines.tasks包

await 方法

  • Awaits the completion of the task without blocking a thread.

    等待任务完成而不阻塞线程。

  • This suspending function is cancellable.

    这个暂停功能是可以取消的。

  • If the Job of the current coroutine is cancelled or completed while this suspending function is waiting, this function stops waiting for the completion stage and immediately resumes with CancellationException.

    如果当前协程的Job在挂起函数等待期间被取消或完成,该函数将停止等待完成阶段,并立即用CancellationException恢复。

  • For bi-directional cancellation, an overload that accepts CancellationTokenSource can be used.

    对于双向取消,可以使用接受CancellationTokenSource的重载。

suspend fun <T> Task<T>.await(): T

androidx.navigation.NavController 类

addOnDestinationChangedListener 方法

Adds an OnDestinationChangedListener to this controller to receive a callback whenever the currentDestination or its arguments change.

向控制器添加一个OnDestinationChangedListener,以便在currentDestination或其参数改变时接收回调。

public void addOnDestinationChangedListener(
    @NonNull NavController.OnDestinationChangedListener listener
)

参数

listener:

the listener to receive events

接收事件的侦听器

  • Navigate to a destination from the current navigation graph.

    从当前导航图导航到目标。

  • This supports both navigating via an action and directly navigating to a destination.

    这既支持通过操作导航,也支持直接导航到目的地。

@MainThread
public void navigate(@IdRes int resId)

参数

resId:

an action id or a destination id to navigate to

要导航到的操作id或目标id

报错

  • kotlin.IllegalStateException

    if there is no current navigation node 如果没有当前导航节点

  • kotlin.IllegalArgumentException

    if the desired destination cannot be found from the current destination

    如果无法从当前目标找到所需的目标

androidx.navigation.viewpager2.widget 类

ViewPager2 replaces androidx.viewpager.widget.

ViewPager2替换androidx.viewpager.widget。

ViewPager, addressing most of its predecessor’s pain-points, including right-to-left layout support, vertical orientation, modifiable Fragment collections, etc.

ViewPager,解决了其前辈的大部分痛点,包括从右向左的布局支持,垂直方向,可修改的片段集合等

registerOnPageChangeCallback 方法

public void registerOnPageChangeCallback(
    @NonNull ViewPager2.OnPageChangeCallback callback
)

Add a callback that will be invoked whenever the page changes or is incrementally scrolled.

添加一个回调,该回调将在页面变动或滚动时调用。

See OnPageChangeCallback.

看到OnPageChangeCallback。

androidx.navigation.viewpager2.OnPageChangeCallback 抽象类

Callback interface for responding to changing state of the selected page.

响应所选页面状态变化的回调接口。

内部有三个抽象方法

onPageSelected 抽象方法

This method will be invoked when a new page becomes selected.

当选择新页面时,将调用此方法。

public void onPageSelected(int position)

参数

position:选定页面的位置索引

androidX.fragment.app.Fragment 类

getViewLifecycleOwner 方法

  • Get a LifecycleOwner that represents the Fragment’s View lifecycle.

    获取一个代表Fragment视图生命周期的LifecycleOwner。

  • In most cases, this mirrors the lifecycle of the Fragment itself, but in cases of detached Fragments, the lifecycle of the Fragment can be considerably longer than the lifecycle of the View itself.

    在大多数情况下,这反映了Fragment本身的生命周期,但在分离Fragment的情况下,Fragment的生命周期可能比View本身的生命周期长得多。

@MainThread
public @NonNull LifecycleOwner getViewLifecycleOwner()

返回值

A LifecycleOwner that represents the Fragment’s View lifecycle.

代表Fragment视图生命周期的LifecycleOwner。

错误

java.lang.IllegalStateException:if the Fragment’s View is null. 如果Fragment的视图为空。

javax.inject.Inject 接口

  • Identifies injectable constructors, methods, and fields.

    标识可注入的构造函数、方法和字段。

  • May apply to static as well as instance members.

    可以应用于静态成员和实例成员。

  • An injectable member may have any access modifier (private, package-private,protected, public).

    可注入成员可以有任何访问修饰符(private, package-private,protected, public)。

  • Constructors are injected first, followed by fields, and then methods.

    首先注入构造函数,然后是字段,然后是方法。

  • Fields and methods in superclasses are injected before those in subclasses.

    父类中的字段和方法在子类中的字段和方法之前注入。

  • Ordering of injection among fields and among methods in the same class is not specified.

    没有指定同一类中字段之间和方法之间的注入顺序。

@Target({ METHOD, CONSTRUCTOR, FIELD })
@Retention(RUNTIME)
@Documented
public @interface Inject {}

引用

关于媒体浏览器服务(MediaBrowserService)

Android开发手册


文章作者: TheCara
版权声明: 本博客所有文章除特別声明外,均采用 CC BY-NC 4.0 许可协议。转载请注明来源 TheCara !
 上一篇
Android-PackageManager Android-PackageManager
PackageManager Class for retrieving various kinds of information related to the application packages that are currently
2020-12-07
下一篇 
Android 图片适配 Android 图片适配
Android图片适配 android的drawable文件共有: 中文 文件夹名称 低密度 drawable-ldpi 中等密度 drawable-mdpi 高密度 drawable-hdpi 超高密度 drawa
2020-12-01
  目录