NPE in 'android.media.session.ISession.getController()'

586 Views Asked by At

I've noticed this log in my crashlytics:

Caused by java.lang.NullPointerException: Attempt to invoke interface method 'android.media.session.ISessionController android.media.session.ISession.getController()' on a null object reference
   at android.media.session.MediaSession.<init>(MediaSession.java:199)
   at android.support.v4.media.session.MediaSessionCompat$MediaSessionImplApi29.createFwkMediaSession(MediaSessionCompat.java:4457)
   at android.support.v4.media.session.MediaSessionCompat$MediaSessionImplApi21.<init>(MediaSessionCompat.java:3821)
   at android.support.v4.media.session.MediaSessionCompat$MediaSessionImplApi22.<init>(MediaSessionCompat.java:4405)
   at android.support.v4.media.session.MediaSessionCompat$MediaSessionImplApi28.<init>(MediaSessionCompat.java:4422)
   at android.support.v4.media.session.MediaSessionCompat$MediaSessionImplApi29.<init>(MediaSessionCompat.java:4447)
   at android.support.v4.media.session.MediaSessionCompat.<init>(MediaSessionCompat.java:576)
   at android.support.v4.media.session.MediaSessionCompat.<init>(MediaSessionCompat.java:539)
   at android.support.v4.media.session.MediaSessionCompat.<init>(MediaSessionCompat.java:503)
   at android.support.v4.media.session.MediaSessionCompat.<init>(MediaSessionCompat.java:477)
   at com.mypackage.API21VersionFactory.getMediaSessionCompat(API21VersionFactory.kt:16)
   at com.mypackage.AudioPlayerService.onCreate(AudioPlayerService.kt:97)
   at android.app.ActivityThread.handleCreateService(ActivityThread.java:4319)
   at android.app.ActivityThread.access$1500(ActivityThread.java:263)
   at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2010)
   at android.os.Handler.dispatchMessage(Handler.java:106)
   at android.os.Looper.loop(Looper.java:240)
   at android.app.ActivityThread.main(ActivityThread.java:8000)
   at java.lang.reflect.Method.invoke(Method.java)
   at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:603)
   at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:947)

When trying create Audio notification style within my AudioService (an Android Service which plays audio files).

I'm building that notification in this way:

NotificationCompat.Builder(this, versionFactory.getAudioPlayerNotificationChannelId(this))
        .setSmallIcon(R.drawable.ic_icon3)
        .setColor(ContextCompat.getColor(this, R.color.color_2))
        .setColorized(true)
        .setCategory(NotificationCompat.CATEGORY_TRANSPORT)
        .setLargeIcon(BitmapFactory.decodeResource(resources, R.drawable.cover_art))
        .setSubText(getString(R.string.audio))
        .apply {
            mediaSessionCompat?.let {
                setStyle(
                    androidx.media.app.NotificationCompat.MediaStyle()
                        .setMediaSession(it.sessionToken)
                        .setShowActionsInCompactView(0)
                )
            }
        }

In order to get my mediaSessionCompat, I've declared a factory of android versions, so I get it this way:

open class API21VersionFactory : DefaultAndroidVersionFactory() {
   ...
   override fun getMediaSessionCompat(context: Context) =
    MediaSessionCompat(context, "TAG")
        .apply {
            setMetadata(
                MediaMetadataCompat.fromMediaMetadata(
                    MediaMetadata.Builder()
                        .putLong(MediaMetadata.METADATA_KEY_DURATION, -1)
                        .build()
                )
            )
        }
  ... 

I'm not being able to replicate it because in every test I do I can play audios and notification is visible (and AudioService has been created successfully).

What's wrong in my code? What is the right way to prevent this and play audios within a Services in versions above API 21?

Thanks in advance!

0

There are 0 best solutions below