gpt4 book ai didi

android - 后台服务 Cordova ionic 应用程序。背景插件不适用于 ios 8.3

转载 作者:太空宇宙 更新时间:2023-11-03 13:19:47 26 4
gpt4 key购买 nike

我想实现一个将地理位置发送到服务器的后台服务。因此我使用了来自 https://github.com/katzer/cordova-plugin-background-mode 的插件 cordova-plugin-background-mode ,适用于安卓。

但如果我在 iOS 8.3 上运行该应用程序并按下主页按钮,该应用程序将停止向服务器发送地理位置信息。在插件的文档中它说:

支持的平台

  1. iOS(包括 iOS8)
  2. 安卓(SDK >=11)
  3. WP8

我错过了什么吗?

编辑:这是来 self 的 Controller 的一些代码

$ionicPlatform.ready(function() {

var watchOptions = {
frequency : 1000,
timeout : 5*60*1000,
enableHighAccuracy: true
};

var watch = $cordovaGeolocation.watchPosition(watchOptions);
watch.then(
null,
function(err) {
alert("WatchPosition failed: "+JSON.stringify(err));
},
function(position) {

$scope.position = position;
});
});

最佳答案

虽然我在探索相同的东西,但基本上没有纯混合方式来实现后台位置跟踪。但是,如果您有兴趣,可以使用 native iOS 实现来实现相同的功能。

在继续进行 Apple 后台位置跟踪之前,您必须了解一些可能的方法的详细信息。

苹果应用程序可以通过两种方式跟踪位置,它们如下:

enter image description here



StartUpdatingLocations 是一种位置跟踪启动方法,它将导致每秒调用一次位置更改回调,直到并且除非您的应用程序处于前台/后台。

无论位置是否发生变化,都会每秒调用一次回调,由处理和决定位置变化的方法决定,实际上是位置变化。

当应用处于暂停/终止状态时,StartUpdatingLocations 将不起作用。这实质上意味着,即使在应用启动时调用了 StartUpdatingLocations,一旦应用在后台移动,回调将不再被调用,即使有任何位置变化也是如此。

StartUpdatingLocations 提供最准确的位置更新。



  1. StartMonitoringSignificantLocationChanges 是一种位置跟踪启动方法,只要用户位置发生重大变化,就会调用位置更改的回调。

  2. 此方法主动使用蜂窝塔位置更改,并且如文档所述每 500-1000 米提供一次位置更新。

  3. StartMonitoringSignificantLocationChanges 可以继续更新位置,即使应用程序处于后台/终止/暂停状态也是如此。

  4. 通过这种方法进行的位置更新不是很可靠,个人使用情况表明位置更新有点随意,并且严重依赖于蜂窝位置更新。


现在您尝试做的事情在 Android 中非常简单,但在 iOS 中却并非如此。

我不会重新发明循环,但您可以探索完整的细节 here

iOS 7 和 8 在后台连续获取位置的方法是使用“startUpdatingLocation”方法

[myLocationManager startUpdatingLocation];

然后下一个技巧是委托(delegate)方法“didUpdateLocations”。您将不得不使用计时器并适本地处理后台任务。任何遗漏的步骤和位置将不会持续更新。

但在应用程序终止/暂停时获取位置的情况下,您不能使用 [myLocationManager startUpdatingLocation];使其工作的唯一方法是使用:-

[anotherLocationManager startMonitoringSignificantLocationChanges];

另一个重要的技巧是,您必须知道如何处理应用程序委托(delegate)“didFinishLaunchingWithOptions”上的键“UIApplicationLaunchOptionsLocationKey”。这是示例代码:-

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{
self.shareModel = [LocationShareModel sharedModel];

if ([launchOptions objectForKey:UIApplicationLaunchOptionsLocationKey]) {
self.shareModel.anotherLocationManager = [[CLLocationManager alloc]init];
self.shareModel.anotherLocationManager.delegate = self;
self.shareModel.anotherLocationManager.desiredAccuracy = kCLLocationAccuracyBestForNavigation;
self.shareModel.anotherLocationManager.activityType = CLActivityTypeOtherNavigation;

if(IS_OS_8_OR_LATER) {
[self.shareModel.anotherLocationManager requestAlwaysAuthorization];
}
[self.shareModel.anotherLocationManager startMonitoringSignificantLocationChanges];

}
return YES;
}

除了 didFinishLaunchingWithOptions 方法之外,您还必须在应用处于 Activity 状态时创建一个 locationManager 实例。以下是一些代码示例:

    - (void)applicationDidEnterBackground:(UIApplication *)application
{
[self.shareModel.anotherLocationManager stopMonitoringSignificantLocationChanges];

if(IS_OS_8_OR_LATER) {
[self.shareModel.anotherLocationManager requestAlwaysAuthorization];
}
[self.shareModel.anotherLocationManager startMonitoringSignificantLocationChanges];
}

- (void)applicationDidBecomeActive:(UIApplication *)application
{
if(self.shareModel.anotherLocationManager)
[self.shareModel.anotherLocationManager stopMonitoringSignificantLocationChanges];

self.shareModel.anotherLocationManager = [[CLLocationManager alloc]init];
self.shareModel.anotherLocationManager.delegate = self;
self.shareModel.anotherLocationManager.desiredAccuracy = kCLLocationAccuracyBestForNavigation;
self.shareModel.anotherLocationManager.activityType = CLActivityTypeOtherNavigation;

if(IS_OS_8_OR_LATER) {
[self.shareModel.anotherLocationManager requestAlwaysAuthorization];
}
[self.shareModel.anotherLocationManager startMonitoringSignificantLocationChanges];
}

关于android - 后台服务 Cordova ionic 应用程序。背景插件不适用于 ios 8.3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30323243/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com