Я работаю над приложением, которому нужен периодический фоновый поток и который запускается даже при закрытии приложения или после перезагрузки телефона.
Задача состоит в том, чтобы получить фактическое положение (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 будет автоматически установлен на это время.Мне нужны более частые обновления.