Эй, я внедряю сервис, который запрашивает фоновое местоположение каждый час, используя Nativesript 6.5 + Angular в Android. Для этой цели я использую androidx.work.PeriodicWorkRequest. Следующий код отлично работает на устройствах с уровнем API выше, чем 26.
@JavaProxy('com.tns.BackgroundLocationService')
export class BackgroundLocationService extends (<any>androidx).work.Worker {
constructor(context, params) {
super(context, params);
return global.__native(this);
}
public doWork() {
// some work here for getting the geolocation
return (<any>androidx).work.ListenableWorker.Result.success();
}
public onStopped() {
console.log("onStopped from MyWorker !!!")
}
}
И для запуска Worker я использую следующий класс Typescript:
@Injectable()
export class MyWorkerHandler {
constructor() {
}
getJobConstrains() {
return (new (<any>androidx).work.Constraints.Builder()).build();
}
getWorkRequest() {
let constrains = this.getJobConstrains();
return (new (<any>androidx).work.PeriodicWorkRequest.Builder(java.lang.Class.forName("com.tns.BackgroundLocationService"), 15, java.util.concurrent.TimeUnit.MINUTES))
.setConstraints(constrains)
.build()
}
enqueue() {
let worker = this.getWorkRequest();
((<any>androidx).work.WorkManager).getInstance()
.enqueueUniquePeriodicWork("sediDomaChallenger", (<any>androidx).work.ExistingPeriodicWorkPolicy.REPLACE, worker);
}
}
Как уже упоминалось, этот код работает нормально в версиях выше 26. Но при запуске его на устройствах с более низким SDK я получаю следующую ошибку:
JS: ERROR Error: Uncaught (in promise): Error: java.lang.NoClassDefFoundError: java.time.Duration
Я нашел этот поток в stackoverflow Невозможно импортировать java .time.Duration в классе PeriodicWorkRequest (WorkManager) , но из того, что я увидел, я компилирую свой код в версии 29. WorkManager работает на каждой версии Android, когда я использую OneTimeWorkRequest.
Можете ли вы сказать мне, что я делаю неправильно? Я предполагаю, что это как-то связано с настройкой NS, или, может быть, я не понимаю Android, ну, в конце концов, я веб-разработчик :)
Tnx заранее <3 </p>