Подключение к сервису onServiceConnected вызывается только один раз для Oreo с помощью bindservice () - PullRequest
0 голосов
/ 24 января 2020

У меня есть класс, который имеет 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() вызывается всегда.

...