解决方法
Service extends NotificationListenerService
使用的内部服务
MediaSessionManager
和
MediaController
MediaSessionManager mediaSessionManager;
ComponentName componentName;
MediaController controller;
MediaSessionManager.OnActiveSessionsChangedListener sessionsChangedListener = new MediaSessionManager.OnActiveSessionsChangedListener() {
@Override
public void onActiveSessionsChanged(@Nullable List<MediaController> controllers) {
Log.d(TAG, "onActiveSessionsChanged: session is changed");
for (MediaController controller : controllers) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
Log.d(TAG, "onActiveSessionsChanged: controller = " + controller.getPackageName());
MediaMetadata meta = controller.getMetadata();
Log.d(TAG, "onCreate: artist = " + meta.getString(MediaMetadata.METADATA_KEY_ARTIST));
Log.d(TAG, "onCreate: song = " + meta.getString(MediaMetadata.METADATA_KEY_TITLE));
}
}
}
};
@Override
public void onCreate() {
super.onCreate();
componentName = new ComponentName(this, TestMediaService.class);
if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP) {
mediaSessionManager = (MediaSessionManager) getSystemService(Context.MEDIA_SESSION_SERVICE);
mediaSessionManager.addOnActiveSessionsChangedListener(sessionsChangedListener, componentName);
List<MediaController> controllers = mediaSessionManager.getActiveSessions(componentName);
Log.d(TAG, "onCreate listener: controllers size = " + controllers.size());
for (MediaController mediaController : controllers) {
controller = mediaController;
Log.d(TAG, "onCreate: controller = " + controller.getPackageName());
MediaMetadata meta = controller.getMetadata();
Log.d(TAG, "onCreate: artist = " + meta.getString(MediaMetadata.METADATA_KEY_ARTIST));
Log.d(TAG, "onCreate: song = " + meta.getString(MediaMetadata.METADATA_KEY_TITLE));
}
}
}