У меня есть класс, который имеет ServiceConnection следующим образом:
public class RadioManager {
private static RadioManager instance = null;
private static RadioService service;
private Context context;
private boolean serviceBound;
Intent intent;
private RadioManager(Context context) {
this.context = context;
serviceBound = false;
}
public static RadioManager with(Context context) {
if (instance == null)
instance = new RadioManager(context);
return instance;
}
public static RadioService getService() {
return service;
}
public void playOrPause(String streamUrl) {
service.playOrPause(streamUrl);
}
public boolean isPlaying() {
return service.isPlaying();
}
public void bind() {
Log.e("service running", isMyServiceRunning(RadioService.class) + "");
intent = new Intent(context, RadioService.class);
context.bindService(intent, serviceConnection, Context.BIND_AUTO_CREATE);
context.startService(intent);
if (service != null) {
EventBus.getDefault().post(service.getStatus());
}
}
public void unbind() {
context.unbindService(serviceConnection);
service.stop();
}
private ServiceConnection serviceConnection = new ServiceConnection() {
@Override
public void onServiceConnected(ComponentName arg0, IBinder binder) {
service = ((RadioService.LocalBinder) binder).getService();
serviceBound = true;
}
@Override
public void onServiceDisconnected(ComponentName arg0) {
serviceBound = false;
}
};
private boolean isMyServiceRunning(Class<?> serviceClass) {
ActivityManager manager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
for (ActivityManager.RunningServiceInfo service : manager.getRunningServices(Integer.MAX_VALUE)) {
if (serviceClass.getName().equals(service.service.getClassName())) {
return true;
}
}
return false;
}
}
Все работает нормально ниже Oreo, но для Oreo проблема, с которой я сталкиваюсь, заключается в том, что onServiceConnected()
метод вызывается только один раз, даже после отмены привязки и повторного связывания. Но для более низких версий тот же код работает нормально, и метод onServiceConnected()
вызывается всегда.