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类
媒体浏览器服务
关键类型
- MediaBrowserServiceCompat 媒体浏览器服务
- MediaBrowserCompat 媒体浏览器
- MediaControllerCompat 媒体控制器
- 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来显示一条信息
返回值
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 方法
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 {}