Фоновая геолокация: подписка не существует для типа Promise <any> - PullRequest
0 голосов
/ 14 февраля 2019

Здравствуйте, друзья мои разработчики, я использую ionic 4 и пытаюсь узнать местоположение пользователя по GPS, в частности, для каждого 1-часового интервала.Так что это приложение, отслеживающее местоположение пользователя каждый час.

Я использовал документацию по плагину Ionic 4 Background с официального сайта и нашел этот код для установки этого плагина, в котором говорится, что этот плагин будет работать, даже когда приложениевыходы, так что я надеюсь, что это то, что мне нужно.

Я использовал следующий код для установки плагина Background-Geolocation в приложение Ionic 4:

ionic cordova plugin add cordova-plugin-mauron85-background-geolocation@alpha
npm install @ionic-native/background-mode

Но после него, когда я пытаюсь его протестировать, в моем app.component.ts mainфайл, код не работает!

this.platform.ready().then(() => { 

      this.statusBar.styleDefault();
      this.splashScreen.hide();

      //setting options for backgroun-geolocatuion
      const config: BackgroundGeolocationConfig = {
        desiredAccuracy: 10,
        stationaryRadius: 20,
        distanceFilter: 30,
        debug: true, 
        stopOnTerminate: false,  
     };



      this.backgroundGeolocation.configure(config)
      .subscribe((location: BackgroundGeolocationResponse) => {

      // ERROR comes here ==> *subscribe* does not exist on type Promise<any> ???  

        alert(location.longitude);  
      });

      this.backgroundGeolocation.start();

    });

Это показывает эту ошибку:

 // ERROR comes here ==> Subscribe does not exist on type Promise<any>

Я не могу получить возвращенные данные как подписанные данные из-за этой ошибки.Мне нужны данные о местоположении пользователя для каждого 1-часового интервала (даже если пользователь перемещается или нет), но эта подписка показывает ошибку, как я уже говорил выше.Во-первых, если я изменяю «подписка» на «потом», то он возвращает данные за один раз, что тоже не определено.

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

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

Спасибо заранее:)

PS: я импортировал все провайдеры и конструктор уже над кодом и в файлах основного модуля.

Импорт:

*app/app.component.ts*



import { NgModule } from '@angular/core';
import { BrowserModule } from '@angular/platform-browser';
import { RouteReuseStrategy } from '@angular/router';

import { IonicModule, IonicRouteStrategy } from '@ionic/angular';
import { SplashScreen } from '@ionic-native/splash-screen/ngx';
import { StatusBar } from '@ionic-native/status-bar/ngx';

import { AppComponent } from './app.component';
import { AppRoutingModule } from './app-routing.module';
import { BackgroundGeolocation } from '@ionic-native/background-geolocation/ngx';

@NgModule({
  declarations: [AppComponent],
  entryComponents: [],
  imports: [BrowserModule, IonicModule.forRoot(), AppRoutingModule],
  providers: [
    StatusBar,
    BackgroundGeolocation, 
    SplashScreen,
    { provide: RouteReuseStrategy, useClass: IonicRouteStrategy }
  ],
  bootstrap: [AppComponent]
})
export class AppModule {}

Ответы [ 5 ]

0 голосов
/ 20 мая 2019

this.backgroundGeolocation.configure (config) .then ((location) => {this.backgroundGeolocation.on (BackgroundGeolocationEvents.location) .subscribe ((location: BackgroundGeolocationResponse) => {console.log ('BackgroundGeolocationResponse', location);}, (err) => {console.log (err);})

0 голосов
/ 22 марта 2019

Реализация изменилась в Ionic 4, так как вы можете видеть документы для Ionic 4. Они, должно быть, обновили его, чтобы пообещать, чтобы мы не могли сейчас подписаться.Используйте затем с обещанием.

https://ionicframework.com/docs/native/background-geolocation/

Для Ionic 4

Ниже приведен фрагмент кода, который разрешаетсяЭта проблема

import { BackgroundGeolocation, BackgroundGeolocationConfig, BackgroundGeolocationResponse } from '@ionic-native/background-geolocation';

constructor(private backgroundGeolocation: BackgroundGeolocation) { }

...

const config: BackgroundGeolocationConfig = {
            desiredAccuracy: 10,
            stationaryRadius: 20,
            distanceFilter: 30,
            debug: true, //  enable this hear sounds for background-geolocation life-cycle.
            stopOnTerminate: false, // enable this to clear background location settings when the app terminates
    };

this.backgroundGeolocation.configure(config)
  .subscribe((location: BackgroundGeolocationResponse) => {

    console.log(location);

    // IMPORTANT:  You must execute the finish method here to inform the native plugin that you're finished,
    // and the background-task may be completed.  You must do this regardless if your HTTP request is successful or not.
    // IF YOU DON'T, ios will CRASH YOUR APP for spending too much time in the background.
    this.backgroundGeolocation.finish(); // FOR IOS ONLY

  });

// start recording location
this.backgroundGeolocation.start();

// If you wish to turn OFF background-tracking, call the #stop method.
this.backgroundGeolocation.stop();

Для Ionic 3, если эта ошибка возникает в плагине фоновой геолокации.

// ERROR comes here ==> Subscribe does not exist on type Promise<any>

Удалите последний плагин и замените его на

npm rm --save @ionic-native/background-geolocation  
npm install --save @ionic-native/background-geolocation@5.0.0-beta.21 
0 голосов
/ 14 февраля 2019

Это, кажется, несоответствие версий - множество версий и противоречивая документация повсюду.После большого количества пробных ошибок

Для ionic 3 это работает для меня ...

$ ionic cordova plugin add cordova-plugin-mauron85-background-geolocation@2.2.5
$ npm install --save @ionic-native/background-geolocation@3

Для ionic 4 попробуйте, и это может помочь вам.

0 голосов
/ 07 марта 2019

Ответ Mayank помог мне, однако, версия 2.2.5 генерирует неудачную сборку и приводит к следующей ошибке -

AAPT: ошибка: ресурс android: attr / fontVariationSettings не найден.

Я бы порекомендовал -

$ плагин ionic cordova add cordova-plugin-mauron85-background-geolocation@2.3.5
$ npm install --save @ ionic-native / background-geolocation @ 3

Ссылка: https://ionic.zendesk.com/hc/en-us/articles/360001961853-Ionic-Appflow-Android-package-build-fails-with-AAPT-error

Надеюсь, это кому-нибудь поможет.

0 голосов
/ 14 февраля 2019

this.backgroundGeoLocation.configure (config) предназначен только для конфигурации геолокации и является обещанием, указывающим на успех или неудачу конфигурации.

Первая установка следующая:

ionic cordova plugin add cordova-plugin-geolocation
npm install --save @ionic-native/geolocation
ionic cordova plugin add cordova-plugin-mauron85-background-geolocation
npm install --save @ionic-native/background-geolocation

Теперь включитеих в ваших провайдерах

app.module.ts

import {LocationTrackerProvider} from '../providers/location.provider';
import { BackgroundGeolocation } from '@ionic-native/background-geolocation';
import { Geolocation } from '@ionic-native/geolocation';

Создайте location.provider.ts (который добавлен в app.module.ts)

location.provider.ts

import { BackgroundGeolocation } from '@ionic-native/background-geolocation';
import { Geolocation, Geoposition } from '@ionic-native/geolocation';

constructor(private backgroundGeolocation: BackgroundGeolocation){}

initLocation(){

    let config = {
        ...
    };

    this.backgroundGeolocation.configure(config).subscribe((location) => {
      console.log('BackgroundGeolocation:  ' + location.latitude + ',' + location.longitude);

    }, (err) => {
      console.log(err);
    });

}
...