后台 – iOS9 startMonitoringSignificantLocationChanges终止后无法启动应用程序?

后台 – iOS9 startMonitoringSignificantLocationChanges终止后无法启动应用程序?,第1张

概述我正在开发一个需要将当前位置发送到服务器的iPhone应用程序,以便知道要发送的推送通知.它不一定非常精确,startMonitoringSignificantLocationChanges非常适合我的需求. 只要应用程序在屏幕上或后台运行,这一切都很有效.但是,如果我杀死/终止应用程序,它将不再起作用.根据我的理解,该应用程序应该使用特殊的UIApplicationLaunchOptionsLo 我正在开发一个需要将当前位置发送到服务器的iPhone应用程序,以便知道要发送的推送通知.它不一定非常精确,startMonitoringSignificantLocationChanges非常适合我的需求.

只要应用程序在屏幕上或后台运行,这一切都很有效.但是,如果我杀死/终止应用程序,它将不再起作用.根据我的理解,该应用程序应该使用特殊的UIApplicationLaunchOptionsLocationKey作为启动选项自动重新启动.然而,应用程序不重新启动(至少不在模拟器中).

我也在这里读过一些东西:
Behaviour for significant change location API when terminated/suspended?

自动重新启动是否仅在应用程序被系统终止于挂起状态而不是手动终止应用程序时才起作用?我还尝试了特殊的info.pList UIApplicationExitsOnSuspend,当它进入后台时也会终止应用程序.它也没有重新启动.

有没有办法模拟系统在模拟器中终止的应用程序?

手机重启后iOS更新后会发生什么?有没有办法确保应用程序重新启动?

解决方法 一个应用程序由SLC重新启动,无论它被杀死时如何被杀死,至少有一个CLLocationManager调用了startMonitoringSignificantLocationChanges.有一点需要注意 – 在版本iOS7.0(.x)中,它被破坏了.它开始在iOS7.1中再次运行.

要实现这一目标,您需要完成几个步骤.

>在项目功能中,您必须启用后台模式位置更新,因为您希望在后台唤醒.
>您需要将密钥NSLocationAlwaysUsageDescription添加到info.pList,其中包含您希望始终能够在后台使用位置的原因的说明.
>在代码中,您必须请求用户授权始终使用位置
>在代码中,您必须请求在后台继续提供位置更新
>在代码中,您必须开始监视重要的位置更改

这是一个例子:

AppDelegate中,H

#import <UIKit/UIKit.h>#import <CoreLocation/CoreLocation.h>@interface AppDelegate : UIResponder <UIApplicationDelegate,CLLocationManagerDelegate>@property (strong,nonatomic) UIWindow *window;@property CLLocationManager* locationMgr;@end

AppDelegate.m

#import "AppDelegate.h"@implementation AppDelegate@synthesize locationMgr;- (BOol)application:(UIApplication *)application dIDFinishLaunchingWithOptions:(NSDictionary *)launchOptions {        NSLog(@"app launching");    locationMgr = [[CLLocationManager alloc] init];    [locationMgr setDelegate:self];    // Added in iOS8    if([locationMgr respondsToSelector:@selector(requestAlwaysAuthorization)])        [locationMgr requestAlwaysAuthorization];    // Added in iOS9    if([locationMgr respondsToSelector:@selector(setAllowsBackgroundLocationUpdates:)])        [locationMgr setAllowsBackgroundLocationUpdates:YES];    [locationMgr startMonitoringSignificantLocationChanges];    return YES;}-(voID) locationManager:(CLLocationManager *)manager dIDUpdateLocations:(NSArray *)locations{    NSLog(@"app delegate received significant location change");    [[UIApplication sharedApplication] setApplicationIconBadgeNumber:[[UIApplication sharedApplication] applicationIconBadgeNumber]+1];}@end

第一次在设备上运行应用程序时,单击“确定”以允许应用程序在请求时在后台使用您的位置.然后双击主页按钮并从任务切换器上滑动应用程序以将其终止.单击主页,然后从屏幕底部向上滑动以打开控制中心并打开飞行模式,等待几秒钟,然后关闭飞行模式.在您的应用上观看徽章计数器增量.

它是由iOS在SLC上发布的.

我想补充一点.如果您创建两个CLLocationManager实例并在两者上调用startMonitoringSignificantLocationChanges,则在其中一个上调用stopMonitoringSignificantLocationChanges.即使其他CLLocationManager将在应用程序继续运行时继续接收SLC事件,但当您因任何原因退出应用程序时,它将不会重新启动.

似乎退出之前的最后一次调用设置了重新启动行为.

启动,启动,停止,退出 – 应用程序不会重新启动SLC.

启动,停止启动,退出 – 应用程序会重新启动SLC.

总结

以上是内存溢出为你收集整理的后台 – iOS9 startMonitoringSignificantLocationChanges终止后无法启动应用程序?全部内容,希望文章能够帮你解决后台 – iOS9 startMonitoringSignificantLocationChanges终止后无法启动应用程序?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1048064.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-25
下一篇 2022-05-25

发表评论

登录后才能评论

评论列表(0条)

保存