当应用程序想要发布媒体回放信息或处理媒体键时,应该创建MediaSession。一般来说,一个应用程序只需要一个会话来进行所有的播放,尽管可以创建多个会话来提供更精细的媒体控制。
一旦创建了会话,会话的所有者可以将其会话令牌传递给其他进程,以允许它们创建一个MediaControllerCompat来与会话交互。
为了接收命令、媒体键和其他事件, MediaSessionCompatCallback 必须被设置,通过 setCallback(Callback)
当一个应用程序完成播放时,它必须调用release()来清理会话并通知任何控制器。
MediaSessionCompat对象不是线程安全的,所有调用都应该来自同一个线程。
这是在API级别4之后以向后兼容的方式引入的一个访问MediaSession特性的助手。
预定义的自定义动作,将当前播放的媒体标记为不适当的。
预定义的自定义动作跟随艺术家,专辑,或播放列表。额外的bundle必须有ARGUMENT_MEDIA_ATTRIBUTE来指示follow *** 作的类型。这个bundle还可以有一个可选的字符串参数ARGUMENT_MEDIA_ATTRIBUTE_VALUE,用来指定要追随的目标(例如,要追随的艺术家的名字)。如果省略此参数,则当前播放的媒体将成为 *** 作的目标。因此,会话必须对当前元数据执行以下 *** 作。如果当前元数据中没有指定的属性,则控制器不能忽略该参数。
预定义的自定义动作跳过广告,目前正在播放。
预定义的自定义动作取消跟踪艺术家,专辑,或播放列表。额外的bundle必须有ARGUMENT_MEDIA_ATTRIBUTE来指示unfollow *** 作的类型。bundle还可以有一个可选的字符串参数ARGUMENT_MEDIA_ATTRIBUTE_VALUE,用来指定要取消follow的目标(例如,要取消follow的艺术家的名字)。如果省略此参数,则当前播放的媒体将成为 *** 作的目标。因此,会话必须对当前元数据执行unfollow *** 作。如果当前元数据中没有指定的属性,则控制器不能忽略该参数。
参数来指示媒体属性。它应该是以下其中之一:
字符串参数,表示媒体属性的值(例如,艺术家的名字)。
在会话上设置此标志以指示它可以处理媒体按钮事件。废弃了
在会话上设置此标志,以指示它通过其MediaSessionCompatCallback处理队列管理命令。
在会话上设置这个标志来指示它通过它的 MediaSessionCompatCallback 来处理传输控制命令。废弃
ARGUMENT_MEDIA_ATTRIBUTE的值,表示专辑。
ARGUMENT_MEDIA_ATTRIBUTE的值表示艺术家。
ARGUMENT_MEDIA_ATTRIBUTE的值指示播放列表。
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 void addOnActiveChangeListener (MediaSessionCompatOnActiveChangeListener listener)
添加一个侦听器,当会话的活动状态改变时,将通知该侦听器。这主要是由支持库使用,应用程序不应该需要。
public static MediaSessionCompat fromMediaSession (Context context, Object mediaSession)
从框架MediaSession对象创建一个实例。
此方法仅支持API 21+。在API 20及以下,它返回null。
注意:从这个方法返回的MediaSessionCompat对象可能不会提供MediaSessionCompat的全部功能,直到设置一个新的MediaSessionCompat callback。为了避免这种情况,当需要一个MediaSessionCompat和一个框架MediaSession时,建议首先创建一个MediaSessionCompat,然后通过getMediaSession()获得框架会话。
public MediaControllerCompat getController ()
获取此会话的控制器。这是一种方便的方法,可以避免在进程中缓存自己的控制器。
public final MediaSessionManagerRemoteUserInfo getCurrentControllerInfo ()
获取发送当前请求的控制器信息。
注意:这只在请求回调时有效,如MediaSessionCompatCallbackonPlay()。
注意:从API 21到23,这个方法返回一个假的MediaSessionManagerRemoteUserInfo,取值如下:
包名为MediaSessionManagerRemoteUserInfoLEGACY_CONTROLLER。
PID和UID的值为负值。
注意:从API 24到27,MediaSessionManager。从这个方法返回的RemoteUserInfo将具有负的uid和pid。在大多数情况下,它将具有正确的包名,但有时它将无法获得正确的包名。
public Object getMediaSession ()
获取基础框架MediaSession对象。
此方法仅支持API 21+。
public Object getRemoteControlClient ()
public MediaSessionCompatToken getSessionToken ()
检索一个令牌对象,应用程序可以使用它来创建一个MediaControllerCompat来与这个会话进行交互。会话的所有者负责决定如何分发这些令牌。
在BuildVERSION_CODES之前的平台版本上。LOLLIPOP这个令牌只能在你的应用程序中使用,因为没有办法保证其他应用程序使用相同版本的支持库。
未完待续
thisgetClass()getSimpleName() //包名+类名
thistoString() //指针地址
this代表当前对象
可以使用以下代码来获取src目录下所有的包名,类名,方法名 以及通过一个类名获得该类下的所有方法名。
import javaioFile;
import javalangreflectMethod;
public class LoopApp {
public static void main(String[] args) throws Exception {
String packageName = "";
File root = new File(SystemgetProperty("userdir") + "\\src");
loop(root, packageName);
}
public static void loop(File folder, String packageName) throws Exception {
File[] files = folderlistFiles();
for (int fileIndex = 0; fileIndex < fileslength; fileIndex++) {
File file = files[fileIndex];
if (fileisDirectory()) {
loop(file, packageName + filegetName() + "");
} else {
listMethodNames(filegetName(), packageName);
}
}
}
public static void listMethodNames(String filename, String packageName) {
try {
String name = filenamesubstring(0, filenamelength() - 5);
Object obj = ClassforName(packageName + name);
Method[] methods = objgetClass()getDeclaredMethods();
Systemoutprintln(filename);
for (int i = 0; i < methodslength; i++) {
Systemoutprintln("\t" + methods[i]getName());
}
} catch (Exception e) {
Systemoutprintln("exception = " + egetLocalizedMessage());
}
}
}
以上就是关于MediaSessionCompat全部的内容,包括:MediaSessionCompat、java 获取当前的对象名、java怎么获取src目录下所有的包名,类名,方法名 以及通过一个类名获得该类下的所有方法名等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)