Периодическая справочная служба Android - PullRequest
0 голосов
/ 05 марта 2019

Я работаю над приложением, которому нужен периодический фоновый поток и который запускается даже при закрытии приложения или после перезагрузки телефона.

Задача состоит в том, чтобы получить фактическое положение (GPS) и сравнить егос некоторыми локальными данными, нет необходимости в сети.Когда пользователь находится в определенном месте, я покажу уведомление.

Моя проблема в том, что я не знаю, какой метод использовать.Я прочитал несколько статей о JobScheduler, AlarmManager, IntentService и т. Д., Но на самом деле ничего не работало вечно, периодически с обновлением каждые 60 секунд, в собственном потоке. РЕДАКТИРОВАТЬ : Я также не хочу, чтобы липкое уведомление все время.

Что мне делать?

Спасибо!

CODE :

В этом коде моя служба работает в собственном потоке.Код выполняется без ошибок.

открытый класс LocationNotificationService extends JobService {

public static final String TAG = "AppService";
private boolean jobCancelled = false;

@Override
public boolean onStartJob(JobParameters params) {
    Log.d(TAG, "Job started");
    doBackgroundWork(params);
    return true;
}

private void doBackgroundWork(JobParameters params) {
    new Thread(new Runnable() {
        @Override
        public void run() {
            for (int i=0; i<20;i++) {
                if (jobCancelled) {
                    return;
                }
                Log.d(TAG, "RUN" + i);
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
            Log.d(TAG, "Job Finished");
            jobFinished(params, false);
        }
    }).start();
}
@Override
public boolean onStopJob(JobParameters params) {
    Log.d(TAG, "Job canceled before done");
    jobCancelled = true;
    return true;
}

} ​​

Проблема заключается в конфигурации планировщика в моей функции MainActivity:

private void startLocationNotificationService() {
    ComponentName name = new ComponentName(this, LocationNotificationService.class);
    JobInfo jobInfo = new JobInfo.Builder(JOB_ID, name)
            .setRequiredNetworkType(JobInfo.NETWORK_TYPE_ANY)
            .setPersisted(true)
            .setPeriodic(15 * 60 * 1000)
            .build();
    JobScheduler scheduler = (JobScheduler) getSystemService(JOB_SCHEDULER_SERVICE);
    int resultCode = scheduler.schedule(jobInfo);
    if (resultCode == JobScheduler.RESULT_SUCCESS) {
        Log.d(TAG, "Job scheduled");
    } else {
        Log.d(TAG, "Job scheduling failed");
    }
}

Я могу обновлять только каждые 15 минут.Каждый раз до 15 будет автоматически установлен на это время.Мне нужны более частые обновления.

...