Class MediaService

java.lang.Object
android.content.Context
android.content.ContextWrapper
android.app.Service
androidx.lifecycle.LifecycleService
androidx.media3.session.MediaSessionService
com.jwplayer.pub.api.background.MediaService
All Implemented Interfaces:
android.content.ComponentCallbacks, android.content.ComponentCallbacks2, androidx.lifecycle.LifecycleOwner

public class MediaService extends androidx.media3.session.MediaSessionService
The background-audio service.

The SDK's manifest already declares this class as a <service> with android:exported="false" and android:foregroundServiceType="mediaPlayback", so hosts inherit the entry through manifest merging. The SDK does not declare the permissions, because it cannot impose foreground-service permissions on apps that never use background audio. A host that uses background audio adds them to its own manifest:


 <uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
 <uses-permission android:name="android.permission.FOREGROUND_SERVICE_MEDIA_PLAYBACK" />
 <uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
 

POST_NOTIFICATIONS is also a runtime permission on Android 13 (API 33) and above: until the user grants it, the playback notification is hidden (playback itself continues).

A host may keep its own <service> entry for this class. It merges cleanly as long as its attributes match; a conflicting value (for example android:exported="true") is a manifest-merger error, fixed by deleting the host entry or with tools:replace. A subclass is a different component and inherits nothing: declare it yourself, with android:foregroundServiceType="mediaPlayback".

Drive the service through MediaServiceController. It is backed by a Media3 MediaSessionService: Media3 owns the notification, the notification channel, foreground promotion and media-button routing. The integration contract is unchanged.

The notification's buttons come from ServiceMediaApi.getNotificationButtons(android.content.Context).

Subclasses that override onCreate, onStartCommand, onBind, onUnbind, onTaskRemoved or onDestroy must call super: Media3 receives the notification's buttons and media keys through them.

  • Nested Class Summary

    Nested Classes
    Modifier and Type
    Class
    Description
    class 
     

    Nested classes/interfaces inherited from class androidx.media3.session.MediaSessionService

    androidx.media3.session.MediaSessionService.Listener, androidx.media3.session.MediaSessionService.ShowNotificationForIdlePlayerMode

    Nested classes/interfaces inherited from class android.content.Context

    android.content.Context.BindServiceFlags
  • Field Summary

    Fields
    Modifier and Type
    Field
    Description
    protected final android.os.IBinder
     
    Deprecated.
    No longer used.

    Fields inherited from class androidx.media3.session.MediaSessionService

    CONNECTION_HINT_KEY_CONTROLLER_INFO_TYPE, CONNECTION_HINT_KEY_INTENT_EXTRAS, CONNECTION_HINT_KEY_SESSION_ID, DEFAULT_FOREGROUND_SERVICE_TIMEOUT_MS, SERVICE_INTERFACE, SHOW_NOTIFICATION_FOR_IDLE_PLAYER_AFTER_STOP_OR_ERROR, SHOW_NOTIFICATION_FOR_IDLE_PLAYER_ALWAYS, SHOW_NOTIFICATION_FOR_IDLE_PLAYER_NEVER

    Fields inherited from class android.app.Service

    START_CONTINUATION_MASK, START_FLAG_REDELIVERY, START_FLAG_RETRY, START_NOT_STICKY, START_REDELIVER_INTENT, START_STICKY, START_STICKY_COMPATIBILITY, STOP_FOREGROUND_DETACH, STOP_FOREGROUND_LEGACY, STOP_FOREGROUND_REMOVE

    Fields inherited from class android.content.Context

    ACCESSIBILITY_SERVICE, ACCOUNT_SERVICE, ACTIVITY_SERVICE, ADVANCED_PROTECTION_SERVICE, ALARM_SERVICE, APP_FUNCTION_SERVICE, APP_OPS_SERVICE, APP_SEARCH_SERVICE, APPWIDGET_SERVICE, AUDIO_SERVICE, BATTERY_SERVICE, BIND_ABOVE_CLIENT, BIND_ADJUST_WITH_ACTIVITY, BIND_ALLOW_ACTIVITY_STARTS, BIND_ALLOW_OOM_MANAGEMENT, BIND_AUTO_CREATE, BIND_DEBUG_UNBIND, BIND_EXTERNAL_SERVICE, BIND_EXTERNAL_SERVICE_LONG, BIND_IMPORTANT, BIND_INCLUDE_CAPABILITIES, BIND_NOT_FOREGROUND, BIND_NOT_PERCEPTIBLE, BIND_PACKAGE_ISOLATED_PROCESS, BIND_SHARED_ISOLATED_PROCESS, BIND_WAIVE_PRIORITY, BIOMETRIC_SERVICE, BLOB_STORE_SERVICE, BLUETOOTH_SERVICE, BUGREPORT_SERVICE, CAMERA_SERVICE, CAPTIONING_SERVICE, CARRIER_CONFIG_SERVICE, CLIPBOARD_SERVICE, COMPANION_DEVICE_SERVICE, CONNECTIVITY_DIAGNOSTICS_SERVICE, CONNECTIVITY_SERVICE, CONSUMER_IR_SERVICE, CONTACT_KEYS_SERVICE, CONTEXT_IGNORE_SECURITY, CONTEXT_INCLUDE_CODE, CONTEXT_RESTRICTED, CREDENTIAL_SERVICE, CROSS_PROFILE_APPS_SERVICE, DEVICE_ID_DEFAULT, DEVICE_ID_INVALID, DEVICE_LOCK_SERVICE, DEVICE_POLICY_SERVICE, DISPLAY_HASH_SERVICE, DISPLAY_SERVICE, DOMAIN_VERIFICATION_SERVICE, DOWNLOAD_SERVICE, DROPBOX_SERVICE, EUICC_SERVICE, FILE_INTEGRITY_SERVICE, FINGERPRINT_SERVICE, GAME_SERVICE, GRAMMATICAL_INFLECTION_SERVICE, HARDWARE_PROPERTIES_SERVICE, HEALTHCONNECT_SERVICE, INPUT_METHOD_SERVICE, INPUT_SERVICE, IPSEC_SERVICE, JOB_SCHEDULER_SERVICE, KEYGUARD_SERVICE, KEYSTORE_SERVICE, LAUNCHER_APPS_SERVICE, LAYOUT_INFLATER_SERVICE, LOCALE_SERVICE, LOCATION_SERVICE, MEDIA_COMMUNICATION_SERVICE, MEDIA_METRICS_SERVICE, MEDIA_PROJECTION_SERVICE, MEDIA_QUALITY_SERVICE, MEDIA_ROUTER_SERVICE, MEDIA_SESSION_SERVICE, MIDI_SERVICE, MODE_APPEND, MODE_ENABLE_WRITE_AHEAD_LOGGING, MODE_MULTI_PROCESS, MODE_NO_LOCALIZED_COLLATORS, MODE_PRIVATE, MODE_WORLD_READABLE, MODE_WORLD_WRITEABLE, NETWORK_STATS_SERVICE, NFC_SERVICE, NOTIFICATION_SERVICE, NSD_SERVICE, OVERLAY_SERVICE, PEOPLE_SERVICE, PERFORMANCE_HINT_SERVICE, PERSISTENT_DATA_BLOCK_SERVICE, POWER_SERVICE, PRINT_SERVICE, PROFILING_SERVICE, RECEIVER_EXPORTED, RECEIVER_NOT_EXPORTED, RECEIVER_VISIBLE_TO_INSTANT_APPS, RESTRICTIONS_SERVICE, ROLE_SERVICE, SATELLITE_SERVICE, SEARCH_SERVICE, SECURITY_STATE_SERVICE, SENSOR_SERVICE, SHORTCUT_SERVICE, STATUS_BAR_SERVICE, STORAGE_SERVICE, STORAGE_STATS_SERVICE, SYSTEM_HEALTH_SERVICE, TELECOM_SERVICE, TELEPHONY_IMS_SERVICE, TELEPHONY_SERVICE, TELEPHONY_SUBSCRIPTION_SERVICE, TETHERING_SERVICE, TEXT_CLASSIFICATION_SERVICE, TEXT_SERVICES_MANAGER_SERVICE, TV_AD_SERVICE, TV_INPUT_SERVICE, TV_INTERACTIVE_APP_SERVICE, UI_MODE_SERVICE, USAGE_STATS_SERVICE, USB_SERVICE, USER_SERVICE, VIBRATOR_MANAGER_SERVICE, VIBRATOR_SERVICE, VIRTUAL_DEVICE_SERVICE, VPN_MANAGEMENT_SERVICE, WALLPAPER_SERVICE, WIFI_AWARE_SERVICE, WIFI_P2P_SERVICE, WIFI_RTT_RANGING_SERVICE, WIFI_SERVICE, WINDOW_SERVICE

    Fields inherited from interface android.content.ComponentCallbacks2

    TRIM_MEMORY_BACKGROUND, TRIM_MEMORY_COMPLETE, TRIM_MEMORY_MODERATE, TRIM_MEMORY_RUNNING_CRITICAL, TRIM_MEMORY_RUNNING_LOW, TRIM_MEMORY_RUNNING_MODERATE, TRIM_MEMORY_UI_HIDDEN
  • Constructor Summary

    Constructors
    Constructor
    Description
     
  • Method Summary

    Modifier and Type
    Method
    Description
    void
    doStartForeground(MediaSessionHelper mediaSessionHelper, NotificationHelper notificationHelper, ServiceMediaApi serviceMediaApi)
    Deprecated.
    No longer called by the SDK; MediaServiceController starts the session when it connects.
    boolean
    Whether the service is currently in the foreground (playback is ongoing).
    android.os.IBinder
    onBind(android.content.Intent intent)
     
    void
     
    void
     
    androidx.media3.session.MediaSession
    onGetSession(androidx.media3.session.MediaSession.ControllerInfo controllerInfo)
     
    boolean
    onUnbind(android.content.Intent intent)
     
    void
    updateForegroundNotification(MediaSessionHelper mediaSessionHelper, NotificationHelper notificationHelper, ServiceMediaApi serviceMediaApi)
    Deprecated.

    Methods inherited from class androidx.media3.session.MediaSessionService

    addSession, clearListener, getSessions, isPlaybackOngoing, isSessionAdded, onStartCommand, onTaskRemoved, onUpdateNotification, onUpdateNotification, pauseAllPlayersAndStopSelf, removeSession, setForegroundServiceTimeoutMs, setListener, setMediaNotificationProvider, setShowNotificationForIdlePlayer, triggerNotificationUpdate

    Methods inherited from class androidx.lifecycle.LifecycleService

    getLifecycle, onStart

    Methods inherited from class android.app.Service

    attachBaseContext, dump, getApplication, getForegroundServiceType, onConfigurationChanged, onLowMemory, onRebind, onTimeout, onTimeout, onTrimMemory, startForeground, startForeground, stopForeground, stopForeground, stopSelf, stopSelf, stopSelfResult

    Methods inherited from class android.content.ContextWrapper

    bindIsolatedService, bindService, bindService, bindService, bindService, bindServiceAsUser, bindServiceAsUser, checkCallingOrSelfPermission, checkCallingOrSelfUriPermission, checkCallingOrSelfUriPermissions, checkCallingPermission, checkCallingUriPermission, checkCallingUriPermissions, checkContentUriPermissionFull, checkPermission, checkSelfPermission, checkUriPermission, checkUriPermission, checkUriPermissions, clearWallpaper, createAttributionContext, createConfigurationContext, createContext, createContextForSplit, createDeviceContext, createDeviceProtectedStorageContext, createDisplayContext, createPackageContext, createWindowContext, createWindowContext, databaseList, deleteDatabase, deleteFile, deleteSharedPreferences, enforceCallingOrSelfPermission, enforceCallingOrSelfUriPermission, enforceCallingPermission, enforceCallingUriPermission, enforcePermission, enforceUriPermission, enforceUriPermission, fileList, getApplicationContext, getApplicationInfo, getAssets, getAttributionSource, getAttributionTag, getBaseContext, getCacheDir, getClassLoader, getCodeCacheDir, getContentResolver, getDatabasePath, getDataDir, getDeviceId, getDir, getDisplay, getExternalCacheDir, getExternalCacheDirs, getExternalFilesDir, getExternalFilesDirs, getExternalMediaDirs, getFilesDir, getFileStreamPath, getMainExecutor, getMainLooper, getNoBackupFilesDir, getObbDir, getObbDirs, getOpPackageName, getPackageCodePath, getPackageManager, getPackageName, getPackageResourcePath, getParams, getResources, getSharedPreferences, getSystemService, getSystemServiceName, getTheme, getWallpaper, getWallpaperDesiredMinimumHeight, getWallpaperDesiredMinimumWidth, grantUriPermission, isDeviceProtectedStorage, isRestricted, isUiContext, moveDatabaseFrom, moveSharedPreferencesFrom, openFileInput, openFileOutput, openOrCreateDatabase, openOrCreateDatabase, peekWallpaper, registerComponentCallbacks, registerDeviceIdChangeListener, registerReceiver, registerReceiver, registerReceiver, registerReceiver, removeStickyBroadcast, removeStickyBroadcastAsUser, revokeSelfPermissionsOnKill, revokeUriPermission, revokeUriPermission, sendBroadcast, sendBroadcast, sendBroadcast, sendBroadcastAsUser, sendBroadcastAsUser, sendOrderedBroadcast, sendOrderedBroadcast, sendOrderedBroadcast, sendOrderedBroadcast, sendOrderedBroadcast, sendOrderedBroadcast, sendOrderedBroadcastAsUser, sendStickyBroadcast, sendStickyBroadcast, sendStickyBroadcastAsUser, sendStickyOrderedBroadcast, sendStickyOrderedBroadcastAsUser, setTheme, setWallpaper, setWallpaper, startActivities, startActivities, startActivity, startActivity, startForegroundService, startInstrumentation, startIntentSender, startIntentSender, startService, stopService, unbindService, unregisterComponentCallbacks, unregisterDeviceIdChangeListener, unregisterReceiver, updateServiceGroup

    Methods inherited from class android.content.Context

    bindIsolatedService, getColor, getColorStateList, getDrawable, getString, getString, getSystemService, getText, obtainStyledAttributes, obtainStyledAttributes, obtainStyledAttributes, obtainStyledAttributes, revokeSelfPermissionOnKill, sendBroadcastWithMultiplePermissions

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • Field Details

    • mBinder

      protected final android.os.IBinder mBinder
    • mMediaSessionHelper

      @Deprecated protected MediaSessionHelper mMediaSessionHelper
      Deprecated.
      No longer used. The media session is now a Media3 session owned by this service. Always null.
  • Constructor Details

    • MediaService

      public MediaService()
  • Method Details

    • onCreate

      public void onCreate()
      Overrides:
      onCreate in class androidx.media3.session.MediaSessionService
    • doStartForeground

      @Deprecated public void doStartForeground(MediaSessionHelper mediaSessionHelper, NotificationHelper notificationHelper, ServiceMediaApi serviceMediaApi)
      Deprecated.
      No longer called by the SDK; MediaServiceController starts the session when it connects. Media3 decides when the service enters the foreground (while playing). mediaSessionHelper is destroyed, since it would open a second, legacy session.
    • updateForegroundNotification

      @Deprecated public void updateForegroundNotification(MediaSessionHelper mediaSessionHelper, NotificationHelper notificationHelper, ServiceMediaApi serviceMediaApi)
      Deprecated.
      No longer called by the SDK; use MediaServiceController.updateServiceMediaApi(ServiceMediaApi). Media3 updates the notification itself whenever the player state or metadata changes.
    • isInForeground

      public boolean isInForeground()
      Whether the service is currently in the foreground (playback is ongoing).
    • onGetSession

      @Nullable public androidx.media3.session.MediaSession onGetSession(@NonNull androidx.media3.session.MediaSession.ControllerInfo controllerInfo)
      Specified by:
      onGetSession in class androidx.media3.session.MediaSessionService
    • onBind

      @Nullable public android.os.IBinder onBind(@Nullable android.content.Intent intent)
      Overrides:
      onBind in class androidx.media3.session.MediaSessionService
    • onUnbind

      public boolean onUnbind(android.content.Intent intent)
      Overrides:
      onUnbind in class android.app.Service
    • onDestroy

      public void onDestroy()
      Overrides:
      onDestroy in class androidx.media3.session.MediaSessionService