您好,我的开发人员朋友们,我使用的是ionic 4,并试图从GPS获取用户位置,特别是每隔1小时。因此,这是一个每小时跟踪用户位置的应用。
我从那里的官方网站上使用过Ionic 4 Background location插件文档,并找到了此代码来安装此插件,该代码说明即使应用程序退出,该插件也可以运行,所以我希望这是我需要的。
我已使用以下代码将Background-Geolocation插件安装到Ionic 4应用程序:
ionic cordova plugin add cordova-plugin-mauron85-background-geolocation@alpha
npm install @ionic-native/background-mode
但是在我尝试对其进行测试之后,在我的app.component.ts主文件中,代码失败了!
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小时间隔一次的用户位置数据(即使用户是否移动),但是此订阅显示了我上面所述的错误。 一件事,如果我将“ subscribe”更改为“ then”,那么它将一次返回数据,但也未定义。
我需要此代码与订阅一起运行,以便每小时获取定期跟踪的用户信息。
请帮助我,我需要为我的工作完成这个项目。我已经尝试了一切,但没有任何线索。
感谢进阶:)
P.S:我已经在代码上方和主模块文件中导入了所有提供程序和构造函数。
进口:
*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 {}
答案 0 :(得分:0)
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);
});
}
答案 1 :(得分:0)
这似乎是版本不匹配-到处都是许多版本和冲突的文档。经过多次尝试错误,
对于离子3 这对我有用...
$ ionic cordova plugin add cordova-plugin-mauron85-background-geolocation@2.2.5
$ npm install --save @ionic-native/background-geolocation@3
对于离子4 试试吧,它可能会对您有所帮助。
答案 2 :(得分:0)
Mayank的回答对我有所帮助,但是版本2.2.5生成的构建失败,并导致以下错误-
AAPT:错误:找不到资源android:attr / fontVariationSettings。
我会推荐-
$ ionic cordova插件添加cordova-plugin-mauron85-background-geolocation@2.3.5
$ npm install --save @ ionic-native / background-geolocation @ 3
链接:php callable
希望这对某人有帮助。
答案 3 :(得分:0)
在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
答案 4 :(得分:0)
this.backgroundGeolocation.configure(config).then((location)=> { this.backgroundGeolocation.on(BackgroundGeolocationEvents.location).subscribe((location:BackgroundGeolocationResponse)=> { console.log('BackgroundGeolocationResponse',location); },(err)=> { console.log(err); })
答案 5 :(得分:0)
我遇到了这个问题,发现文档不正确。
您需要从 def new_item(self, color):
self.item = GraphicsPathItem(color)
self.scene().addItem(self.item)
self.path = QPainterPath()
而不是@ionic-native/background-geolocation/ngx
导入。
这将允许订阅。