gpt4 book ai didi

java - connect() 后未调用 MediaBrowserCompat.ConnectionCallback.onConnected()

转载 作者:行者123 更新时间:2023-12-01 14:17:29 24 4
gpt4 key购买 nike

我正在为 Android 创建一个播放器应用程序并想要访问 MediaControllerCompat来自任何 UI 类。为此,我使用 MediaBrowserCompat类,我正在尝试将它连接到我的 MediaBrowserServiceCompat得到 MediaControllerCompatMediaSessionCompat.Token , 已经设置在我的 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();
}

服务.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() 中设置了断点,但线程并没有挂起。所以,我可以得出结论,回调没有被调用。

最佳答案

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

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

关于java - connect() 后未调用 MediaBrowserCompat.ConnectionCallback.onConnected(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56575472/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com