Собственный текст: Ошибка: java .lang.NoClassDefFoundError: java .time.Duration при использовании WorkManager - PullRequest
0 голосов
/ 16 апреля 2020

Эй, я внедряю сервис, который запрашивает фоновое местоположение каждый час, используя 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>

...