MediaBrowserCompat.connect() никогда не вызывает onConnected или какой-либо метод MediaBrowserCompat.ConnectionCallback

Я пытаюсь подключить свою деятельность к службе MediaBrowserServiceCompat, используя MediaBrowserCompat. Это моя деятельность:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.bush_did_nine_eleven);
    Log.d("activity", " onCreate");
    mediaBrowser = new MediaBrowserCompat(this, new ComponentName(this, MusicServiceMediaBrowser.class), new MediaBrowserCompat.ConnectionCallback() {
                @Override
                public void onConnected() {
                    Log.d("activity", "onconnected");
                    super.onConnected();
                }

                @Override
                public void onConnectionFailed() {
                    Log.d("activity", "onConnectionFailed");
                    super.onConnectionFailed();
                }

                @Override
                public void onConnectionSuspended() {
                    Log.d("activity", "onConnectionSuspended");
                    super.onConnectionSuspended();
                }
            }, null);

    mediaBrowser.connect();
    Log.d("activity", "mediaBrowser.connect() called");

}

@Override
protected void onStart() {
    super.onStart();
    Log.d("activity", "onStart");
}

@Override
protected void onStop() {
    super.onStop();
    Log.d("activity", "onStop");
    mediaBrowser.disconnect();
}

вы можете ожидать, что будет вызван один из методов ConnectionCallback, но это то, что печатает logcat (включая журнал, вызванный из службы):

09-08 19:28:25.126 13469-13469/le1.mytube D/activity:  onCreate
09-08 19:28:25.135 13469-13469/le1.mytube D/activity: mediaBrowser.connect() called
09-08 19:28:25.137 13469-13469/le1.mytube D/activity: onStart
09-08 19:28:25.154 13469-13469/le1.mytube D/service: onCreate

он также падает, когда в моей службе я вызываю setSessionToken(mediaSession.getSessionToken()) с NullPointerException :

09-08 19:34:04.817 19588-19588/le1.mytube E/AndroidRuntime: FATAL EXCEPTION: main
                                                            Process: le1.mytube, PID: 19588
                                                            Theme: themes:{}
                                                            java.lang.RuntimeException: Unable to create service le1.mytube.services.MusicServiceMediaBrowser: java.lang.NullPointerException: Attempt to invoke interface method 'void android.support.v4.media.MediaBrowserServiceCompat$MediaBrowserServiceImpl.setSessionToken(android.support.v4.media.session.MediaSessionCompat$Token)' on a null object reference
                                                                at android.app.ActivityThread.handleCreateService(ActivityThread.java:2921)
                                                                at android.app.ActivityThread.-wrap4(ActivityThread.java)
                                                                at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1446)
                                                                at android.os.Handler.dispatchMessage(Handler.java:102)
                                                                at android.os.Looper.loop(Looper.java:148)
                                                                at android.app.ActivityThread.main(ActivityThread.java:5461)
                                                                at java.lang.reflect.Method.invoke(Native Method)
                                                                at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
                                                                at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
                                                             Caused by: java.lang.NullPointerException: Attempt to invoke interface method 'void android.support.v4.media.MediaBrowserServiceCompat$MediaBrowserServiceImpl.setSessionToken(android.support.v4.media.session.MediaSessionCompat$Token)' on a null object reference
                                                                at android.support.v4.media.MediaBrowserServiceCompat.setSessionToken(MediaBrowserServiceCompat.java:999)
                                                                at le1.mytube.services.MusicServiceMediaBrowser.onCreate(MusicServiceMediaBrowser.java:46)
                                                                at android.app.ActivityThread.handleCreateService(ActivityThread.java:2911)
                                                                at android.app.ActivityThread.-wrap4(ActivityThread.java) 
                                                                at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1446) 
                                                                at android.os.Handler.dispatchMessage(Handler.java:102) 
                                                                at android.os.Looper.loop(Looper.java:148) 
                                                                at android.app.ActivityThread.main(ActivityThread.java:5461) 
                                                                at java.lang.reflect.Method.invoke(Native Method) 
                                                                at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726) 
                                                                at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616) 

в моем манифесте я добавил необходимые <action android:name="android.media.browse.MediaBrowserService"/> для службы, если вам интересно.

Я делаю что-то не так или это просто ошибка в appcompat(v7:25.3.1)?


person Leo300    schedule 08.09.2017    source источник


Ответы (3)


В моем случае у меня возникла проблема с функцией public IBinder onBind(Intent intent) в классе обслуживания. Он не должен возвращать значение null. Я просто удалил override функции, и это решило проблему.

person Anton Balashov    schedule 11.03.2018

У меня сработала установка sessionToken в сервисе onCreate.

person Selena Smiertin    schedule 14.05.2020

Это сработало для меня:

setSessionToken(mediaSessionCompat.getSessionToken());

а также

@Nullable
@Override
public IBinder onBind(Intent intent) {
    if (SERVICE_INTERFACE.equals(intent.getAction())) {
        return super.onBind(intent);
    }
    return binder;
}
person Mateusz Kaflowski    schedule 23.11.2017
comment
Что такое SERVICE_INTERFACE? - person Nicolò Ghielmetti; 07.03.2018
comment
Где этот setSessionToken? И действительно, что такое SERVICE_INTERFACE? Что такое связующая переменная здесь? Ответ бесполезен, потому что недостаточно информации. - person Anton Balashov; 11.03.2018