在 connect() 之后未调用 MediaBrowserCompat.ConnectionCallback.onConnected()

Posted

技术标签:

【中文标题】在 connect() 之后未调用 MediaBrowserCompat.ConnectionCallback.onConnected()【英文标题】:MediaBrowserCompat.ConnectionCallback.onConnected() is not being called after connect() 【发布时间】:2019-06-13 07:32:20 【问题描述】:

我正在为 android 创建一个播放器应用程序,并希望从任何 UI 类访问 MediaControllerCompat。为此,我使用MediaBrowserCompat 类,我试图将它连接到我的MediaBrowserServiceCompat 并使用MediaSessionCompat.Token 获取MediaControllerCompat,已经在我的Service 中设置。

我尝试了MediaBrowserCompat.connect() never calls onConnected or any MediaBrowserCompat.ConnectionCallback method 解决方案,但没有帮助。

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 绝对是空的。我在 Callback 的 onConnected() 中设置了断点,但线程不会在其上挂起。所以,我可以得出结论,回调没有被调用。

【问题讨论】:

【参考方案1】:

https://***.com/a/43676925/11485632 - 这个答案帮助我解决了问题。事实证明,您甚至无法实现自己的 Binder。在删除 Service.java 中覆盖的 onBind(Intent intent) 后,回调开始被调用。

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

【讨论】:

以上是关于在 connect() 之后未调用 MediaBrowserCompat.ConnectionCallback.onConnected()的主要内容,如果未能解决你的问题,请参考以下文章

socket

在 xampp 中调用未定义的函数 sqlsrv_connect()

未捕获的错误:在 XAMPP 中调用未定义的函数 sqlsrv_connect()

调用未定义的函数 mysql_connect

雪豹:致命错误:调用未定义函数 mysql_connect()

调用未定义的函数 sqlsrv_connect() ubuntu