MediaControllerCompat
Android 用のプレーヤー アプリを作成しており、任意の UI クラスからアクセスしたいと考えています。この目的のために、MediaBrowserCompat
クラスを使用します。それを my に接続して、既に my に設定されている を取得しようとしてい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
間違いなくヌルです。Callback の onConnected() にブレークポイントを設定しましたが、スレッドは中断しません。したがって、コールバックが呼び出されていないと結論付けることができます。