MediaBrowserCompat.ConnectionCallback.onConnected () не вызывается после connect () - PullRequest
0 голосов
/ 13 июня 2019

Я создаю приложение проигрывателя для Android и хочу получить доступ к MediaControllerCompat из любого класса пользовательского интерфейса.Для этого я использую класс MediaBrowserCompat, я пытаюсь подключить его к своему MediaBrowserServiceCompat и получить MediaControllerCompat с MediaSessionCompat.Token, уже установленным в моем Service.

Я пытался MediaBrowserCompat.connect () никогда не вызывает onConnected или какой-либо метод MediaBrowserCompat.ConnectionCallback решение, но это не помогло.

TortoiseActivity.java

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_tortoise);

        mediaBrowser = new MediaBrowserCompat(
                TortoiseActivity.this,
                new ComponentName(TortoiseActivity.this, Service.class),
                new MediaBrowserCompat.ConnectionCallback() {
                    @Override
                    public void onConnected() {
                        try {
                            MediaSessionCompat.Token token = mediaBrowser.getSessionToken();
                            MediaControllerCompat controller = new MediaControllerCompat(TortoiseActivity.this, token);
                            MediaControllerCompat.setMediaController(TortoiseActivity.this, controller);
                        } catch (RemoteException e) {
                            e.printStackTrace();
                        }
                    }

                    @Override
                    public void onConnectionFailed() {
                        Log.e("TAG", "onConnectionFailed");
                    }

                    @Override
                    public void onConnectionSuspended() {
                        Log.e("TAG", "onConnectionSuspended");
                    }
                },
                null);
        mediaBrowser.connect();
    }

Service.java

    @Nullable
    @Override
    public IBinder onBind(Intent intent) {
        return mBinder;
    }

    @Override
    public void onCreate() {
        super.onCreate();

        mediaSession = new MediaSessionCompat(this, Service.class.getSimpleName());
        setSessionToken(mediaSession.getSessionToken());

        mediaSession.setFlags(MediaSessionCompat.FLAG_HANDLES_MEDIA_BUTTONS | MediaSessionCompat.FLAG_HANDLES_TRANSPORT_CONTROLS);
        mediaSession.setActive(true);

        mediaSession.setCallback(callback);
    }

SmallPlayerFragment.java

void initControls(Activity context) {
        MediaControllerCompat mediaController = MediaControllerCompat.getMediaController(context);
        this.transportControls = mediaController.getTransportControls();
    }

В результате я получаю NullPointer

java.lang.NullPointerException: Attempt to invoke virtual method 'android.support.v4.media.session.MediaControllerCompat$TransportControls android.support.v4.media.session.MediaControllerCompat.getTransportControls()' on a null object reference
        at ru.krivocraft.kbmp.SmallPlayerFragment.initControls(SmallPlayerFragment.java:49)
        at ru.krivocraft.kbmp.TortoiseActivity.getSmallPlayerFragment(TortoiseActivity.java:122)
        at ru.krivocraft.kbmp.TortoiseActivity.showSmallPlayerFragment(TortoiseActivity.java:248)
        at ru.krivocraft.kbmp.TortoiseActivity.access$200(TortoiseActivity.java:31)
        at ru.krivocraft.kbmp.TortoiseActivity$4.onItemClick(TortoiseActivity.java:109)

при попытке получить MediaControllerCompat.TrasportControls.MediaControllerCompat определенно равно нулю.Я установил точку останова в onConnected () Callback, но поток не приостанавливается на нем.Итак, я могу заключить, что обратный вызов не вызывается.

1 Ответ

0 голосов
/ 13 июня 2019

https://stackoverflow.com/a/43676925/11485632 - этот ответ помог мне решить проблему. Оказалось, что вы даже не можете реализовать свой собственный Binder. После удаления переопределенного onBind(Intent intent) в Service.java обратный вызов начал вызываться.

    @Nullable
    @Override
    public IBinder onBind(Intent intent) {
        return mBinder; //remove this custom binder
    }

...