FireBaseJobDispatcher onStopJob не запускается

Я запускаю работу, когда произошел исходящий звонок или входящий звонок

 Bundle bundle = new Bundle();
    bundle.putString("MobileNumber", number);
    bundle.putString("CallStatus", "OUT");
    FirebaseJobDispatcher dispatcher = new FirebaseJobDispatcher(new GooglePlayDriver(ctx));
    Job myJob = dispatcher.newJobBuilder()
            .setService(FirebaseRecordingService.class) // the JobService that will be called
            .setTag("my-unique-tag1")        // uniquely identifies the job
            .setExtras(bundle)
            .build();

    dispatcher.mustSchedule(myJob);

На этот раз onStartJob выполняется. Теперь я прекращаю работу после завершения вызова.

 FirebaseJobDispatcher dispatcher = new FirebaseJobDispatcher(new GooglePlayDriver(ctx));
        dispatcher.cancel("my-unique-tag1");

Но на этот раз стоп-джоб не выполнен. Может кто-нибудь, пожалуйста, скажите мне, где я делаю неправильно.

1 ответ

Попробуйте это решение для вашей проблемы

Когда вы начинаете работу, просто проверьте, если FirebaseRecordingService.Class класс обслуживания запущен или нет с помощью этого метода

 private boolean isMyServiceRunning(Class<?> serviceClass) {
        ActivityManager manager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
        for (ActivityManager.RunningServiceInfo service : manager.getRunningServices(Integer.MAX_VALUE)) {
            if (serviceClass.getName().equals(service.service.getClassName())) {
                return true;
            }
        }
        return false;
    }

ваш код выглядит так

if (isMyServiceRunning(context_here)) {
                                    System.out.println("service already started stopping now");
                                    stopService(new Intent(context_here, FirebaseRecordingService.class));
                                }
Bundle bundle = new Bundle();
    bundle.putString("MobileNumber", number);
    bundle.putString("CallStatus", "OUT");
    FirebaseJobDispatcher dispatcher = new FirebaseJobDispatcher(new GooglePlayDriver(ctx));
    Job myJob = dispatcher.newJobBuilder()
            .setService(FirebaseRecordingService.class) // the JobService that will be called
            .setTag("my-unique-tag1")        // uniquely identifies the job
            .setExtras(bundle)
            .build();
    dispatcher.mustSchedule(myJob);

Затем, когда работа выполняется, чтобы остановить службу, которая является заданием на основе firebase.

Сделай это

if (isMyServiceRunning(context_here)) {
    System.out.println("service already started stopping now");
        stopService(new Intent(context_here,FirebaseRecordingService.class));
                                }

И не называйте это

FirebaseJobDispatcher dispatcher = new FirebaseJobDispatcher(new GooglePlayDriver(ctx));

это создаст другой объект класса FirebaseJobDispatcher. Используйте объявленный объект, который используется для запуска службы заданий.

dispatcher.cancel("my-unique-tag1");

Или вы можете позвонить, если одновременно работает только одна служба

dispatcher.cancelAll();
Другие вопросы по тегам