iOS越狱 - 如何在后台获取位置

Posted

技术标签:

【中文标题】iOS越狱 - 如何在后台获取位置【英文标题】:iOS jailbreak - how to get location in background 【发布时间】:2012-03-02 06:09:23 【问题描述】:

我编写了一个作为守护进程启动的小应用程序。它基本上只会输出手机的 GPS 位置。

main.m:

int main(int argc, char *argv[]) 

NSAutoreleasePool *p = [[NSAutoreleasePool alloc] init];
LocationController *obj = [[LocationController alloc] init];
[obj getLocation];    
NSRunLoop *runLoop = [NSRunLoop currentRunLoop];
[runLoop run];

[p drain];
return 0;

LocationController.m

@implementation LocationController
@synthesize locationManager;

-(id)init 
    self = [super init];
    if(self) 
        trackingGPS = false;
        locationManager = [[CLLocationManager alloc] init];
        locationManager.delegate = self;
    
    return self;


-(void)getLocation 
    [locationManager startUpdatingLocation];


- (void)locationManager:(CLLocationManager *)manager didUpdateToLocation:(CLLocation     *)newLocation fromLocation:(CLLocation *)oldLocation 
    NSLog(@"NEW LOCATION :: %@", newLocation);


- (void)locationManager:(CLLocationManager *)manager didFailWithError:(NSError *)error 
    NSLog(@"LOCATION ERROR : %@", error);


-(void) dealloc 
    [locationManager release];
    [super dealloc];

@end

因此,如果我从跳板手动运行应用程序,它可以正常工作并记录 GPS 位置...至少 15-20 秒...然后跳板终止应用程序,因为它不响应 - 预期的行为。

如果我在启动时启动应用程序 (launchDaemon),它也可以正常启动,但委托函数 'didUpdateToLocation' 永远不会被调用!!

我使用的是 ios 5,所以不确定问题出在哪里。 任何帮助都非常感谢。

谢谢!!

【问题讨论】:

【参考方案1】:

您应该使用startMonitoringSignificantLocationChanges,而不是调用“startUpdatingLocation”。每当用户的位置发生重大变化时,它就会调用您的应用,您将有时间做一些后台处理并确定是否要打开您的应用。

如果用户进入您希望监控的某个区域,您也可以让设备调用您的应用。

有关详细信息,请参阅此question。

【讨论】:

嘿,伙计。谢谢提示,但它仍然不起作用!不调用委托函数。但我认为这在 iOS 5+ 上已经不可能了

以上是关于iOS越狱 - 如何在后台获取位置的主要内容,如果未能解决你的问题,请参考以下文章

即使应用程序在后台运行,如何使用 swift 在 ios 中获取位置更新

如何在 iOS 应用程序中每 n 分钟获取一次后台位置更新?

如何在iphone的后台获取位置[关闭]

应用程序在后台运行时如何获取当前位置

无法在 iOS 11 上获取后台位置更新

在后台模式和终止模式下获取位置更新 IOS