当iOS应用在后台甚至被杀死时获取位置

堆叠式

当应用处于活动状态,处于非活动状态并被杀死时,我的应用需要获取用户的位置。当用户的位置靠近商店时,应用程序必须发送本地通知。

我不确定到底发生了什么,但是我无法使我的应用在后台获取位置,并在被杀死时将其唤醒。

我有一个位置管理器(单个,用于whenInUse和Always两种情况),并且在.plist中定义了NSLocationAlwaysUsageDescription和NSLocationWhenInInUseUsageDescription

我正在做的是:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    //The app has been killed/terminated (not in background) by iOS or the user.
    if ([launchOptions objectForKey:UIApplicationLaunchOptionsLocationKey]){

        _locationManager = [CoreLocationManager sharedInstance];
        _locationManager.isAppActive = NO;
        _locationManager.locationManager.desiredAccuracy = kCLLocationAccuracyBestForNavigation;
        _locationManager.locationManager.activityType = CLActivityTypeOtherNavigation;

        if ([_locationManager.locationManager respondsToSelector:@selector(requestAlwaysAuthorization)]) {
            [_locationManager.locationManager requestAlwaysAuthorization];
        }

        [_locationManager addLocationManagerDelegate:self];
    }
}


- (void)applicationDidBecomeActive:(UIApplication *)application
{
    if (_locationManager.locationManager){
        _locationManager.isAppActive = YES;
        [_locationManager.locationManager stopMonitoringSignificantLocationChanges];
    }

    _locationManager = [CoreLocationManager sharedInstance];

    if ([_locationManager respondsToSelector:@selector(requestAlwaysAuthorization)]) {
        [_locationManager.locationManager requestAlwaysAuthorization];
    }

    if ([_locationManager.locationManager respondsToSelector:@selector(requestWhenInUseAuthorization)]) {
        [_locationManager.locationManager requestWhenInUseAuthorization];
    }

    [_locationManager addLocationManagerDelegate:self];

    [_locationManager.locationManager startUpdatingLocation];

}


- (void)applicationDidEnterBackground:(UIApplication *)application
{
    _locationManager.isAppActive = NO;

    if (_locationManager.locationManager){
        [_locationManager.locationManager stopUpdatingLocation];
        [_locationManager.locationManager stopMonitoringSignificantLocationChanges];
    }

    if ([_locationManager.locationManager respondsToSelector:@selector(requestAlwaysAuthorization)]) {
        [_locationManager.locationManager requestAlwaysAuthorization];
    }

    [_locationManager.locationManager startMonitoringSignificantLocationChanges];

}

我做错什么了吗?我不确定是否绝对需要使用地理围栏,但是对于我已经阅读过的startMonitoringSignificantLocationChanges来说,这已经足够了。

Utsav parikh

要在后台获取位置,请使用以下代码。每次重新启动后台任务,将使您的应用在后台长时间运行。

要使用此功能,您需要在项目设置中的“功能”打开“后台模式”同时打开“后台获取”和“位置更新”。

- (void)applicationDidEnterBackground:(UIApplication *)application {

    if ([[UIDevice currentDevice] respondsToSelector:@selector(isMultitaskingSupported)]) { //Check if our iOS version supports multitasking I.E iOS 4

        if ([[UIDevice currentDevice] isMultitaskingSupported]) { //Check if device supports mulitasking
            UIApplication *application = [UIApplication sharedApplication]; //Get the shared application instance

            __block UIBackgroundTaskIdentifier background_task; //Create a task object

            background_task = [application beginBackgroundTaskWithExpirationHandler: ^{
                [application endBackgroundTask:background_task]; //Tell the system that we are done with the tasks
                background_task = UIBackgroundTaskInvalid; //Set the task to be invalid
                //System will be shutting down the app at any point in time now
            }];
        }
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何防止应用在后台被杀死?

iOS应用在后台时的GCM推送通知

iOS 7-后台位置应用程序在获取后台位置时被杀死

当应用在后台尝试访问位置时,是否可以获得日志?

应用在后台时 URL 请求超时

当我的应用在ios中在后台终止时如何执行代码

当应用在Android Pie中被杀死时,可检测网络状态并从后台上传视频数据(API 28)

当应用在Xamarin iOS上被杀死时,如何处理Firebase事件或当用户按下按钮清除通知时如何处理事件?

如何使iOS应用在Swift中永远在后台运行?

当应用在后台收到Phonegap(cordova)的推送通知时,增加徽章编号,

当应用在后台扫描蓝牙连接外设时

当应用在iOS中使用后台位置服务时如何隐藏状态栏消息

当应用程序被杀死/在后台时检测连接更改

当应用程序被杀死或在后台时,华为 PushKit 通知不会出现

更改权限时,应用在后台崩溃-Swift

应用在后台运行时等待响应

我可以让Watch应用在后台运行吗?

如何防止应用在后台关闭?

我的应用在后台消耗过多电池

MeteorJS移动应用在后台推送通知

iOS 位置跟踪甚至应用程序被杀死状态并调用 API 调用

活动在后台被杀死后,应用崩溃

如何在应用程序被杀死而不在 IOS 后台运行时获取通知负载

应用程序在后台时获取位置更新

当应用在Android 7(One Plus 3T)上被杀死时,警报管理器不触发

当应用在 kotlin/android 中被杀死时,删除集合中特定文档(例如当前用户文档)的所有子集合

当应用在横向IOS中启动时容器放错位置

当应用程序被杀死时,如何获取准确的位置更新?

当应用被杀死时,iOS 13会跟踪用户位置