アプリがバックグラウンドにある間にユーザーの位置を送信したい。アプリでは、ユーザーは 1 分から 24 時間までのタイマーを設定できます。アプリをバックグラウンドで実行しようとしましたが、10 分間しか動作しません。タイマーを 10 分以上設定してからアプリをバックグラウンドにすると、アプリはバックグラウンドで 10 分以上実行されません。アプリを 10 分以上実行することは可能ですか? 最長で2時間?
これが私が試したことです:
これを私のplistに追加しました:
これをメソッドに追加しましたapplicationDidEnterBackground:
:
__weak BADAppDelegate * weakSelf = self;
self.backgroundTaskIdentifier =
[[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:nil];
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
int timeTilDone = timerSeconds;// two hours
self.bgTimer =
[NSTimer timerWithTimeInterval:timeTilDone
target:weakSelf
selector:@selector(startTrackLocation)
userInfo:nil
repeats:NO];
[[NSRunLoop mainRunLoop] addTimer:self.bgTimer
forMode:NSDefaultRunLoopMode];
self.testTimer =
[NSTimer timerWithTimeInterval:60
target:weakSelf
selector:@selector(playSilentSound)
userInfo:nil
repeats:YES];
[[NSRunLoop mainRunLoop] addTimer:self.testTimer
forMode:NSDefaultRunLoopMode];
});
毎分音を鳴らして強制的に生き残らせようとした
-(void)playSilentSound
{
if(self.silentSnd == nil)
{
NSString *soundFile;
if ((soundFile = [[NSBundle mainBundle] pathForResource:@"halfsec" ofType:@"caf"]))
{
NSURL *url = [[NSURL alloc] initFileURLWithPath:soundFile];
self.silentSnd = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:NULL];
self.silentSnd.delegate = self;
[self.silentSnd setNumberOfLoops:1];
}
}
[self.silentSnd prepareToPlay];
[self.silentSnd play];
}
しかし、それは役に立ちません。
ありがとう!
アップデート:
これが私のlocationManager初期コードです:
NSLog(@"StartTrackLocation");
if(self.locationManager == nil)
{
self.locationManager = [[CLLocationManager alloc] init];
}
self.locationManager.delegate = self;
self.locationManager.distanceFilter = kCLDistanceFilterNone;
self.locationManager.desiredAccuracy = kCLLocationAccuracyBest;
self.locationManager.pausesLocationUpdatesAutomatically = NO;
[self.locationManager startUpdatingLocation];