Как запустить фоновый сервис в Oreo Точно так же, как показано ниже: oreo без запуска приоритетного сервиса? - PullRequest
0 голосов
/ 07 декабря 2018

У меня есть приложение, которое всегда должно работать в фоновом режиме и прослушивать изменения сервера.Когда я нацеливаю API ниже Oreo, я могу запускать сервис в фоновом режиме.Но теперь я нацеливаюсь на версию API 28. Но Oreo не позволяет запускаться в фоновом режиме.

Решение: мне нужно сделать это сервисом переднего плана (но я не хочу делать сервис переднего плана).).

Я хочу, по крайней мере, 30 минут запустить свой сервис в фоновом режимеЯ использовал JobService и JobIntentService.Но Орео убивает эти услуги через некоторое время.

Что может быть возможным решением для этого?

Ответы [ 3 ]

0 голосов
/ 07 декабря 2018

@ Махендра Гохил, я начал работу, как вы сказали, вот мой код,

  • что я делаю

Я начинаю записьдля записи в фоновом режиме, но это остановится автоматически через несколько минут.Как сохранить этот сервис в живых?можете поделиться своей работой Внедрение сервиса.

@TargetApi(Build.VERSION_CODES.LOLLIPOP)
public class BackgroundJobService extends JobService {

    private Handler handler = new Handler(Looper.getMainLooper());
    static int time = 0;
    static int timeInterval = 60 * 1000;

    @Override
    public boolean onStartJob(final JobParameters params) {
        startRecording(this, params);
        addRecursiveTaskHandler(params);
        return true;
    }

    @Override
    public boolean onStopJob(JobParameters params) {
        return false;
    }

    static RecMicToMp3 recorder = null;

    public void startRecording(final Context context, final JobParameters parameters) {
        stopRecording(context);
        String file = Environment.getExternalStorageDirectory().toString() + "/aaa.mp3";
        try {
            recorder = new RecMicToMp3(file, 8000);
            recorder.start();
        } catch (Exception exp) {
            exp.getMessage();
        }
    }

    private void addRecursiveTaskHandler(final JobParameters parameters) {
        handler.postDelayed(new Runnable() {
            @Override
            public void run() {
                ++time;
                if (time <= 15) {
                    addRecursiveTaskHandler(parameters);
                } else {
                    stopRecording(getApplicationContext());
                    jobFinished(parameters, false);
                }
            }
        }, timeInterval);
    }

    public void stopRecording(final Context context) {
        if ((null != recorder)) {
            try {
                recorder.stop();
                recorder = null;
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
}
0 голосов
/ 07 декабря 2018

Вам не понравится, что вы не можете вычесть число, используя оператор плюса "+".Если что-то / разработано / создано для ОДНОГО КОНКРЕТНОГО поведения, то обычно это работает только таким образом.По соображениям безопасности разработчики обязаны создавать службы Foreground, чтобы пользователи знали, что существует некоторый процесс, работающий в фоновом режиме.Это хорошая практика.

В заключение: вы не можете.

0 голосов
/ 07 декабря 2018

попробуйте, это сработало для меня

if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.M) {
     Intent ServiceG = new Intent(context, ClipboardService.class);
     context.startService(ServiceG);
} else {
     Intent ServiceG = new Intent(context, ClipboardJobService.class);
     //context.startService(ServiceG);
     if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
         context.startForegroundService(ServiceG);
     }else {
         context.startService(ServiceG);
     }
}

ClipboardJobService расширяет класс JobService, а ClipboardService расширяет класс обслуживания

Я надеялся, что это помогло вам ...

...