In meiner App möchte ich die Beschleunigungsmesserdaten aufzeichnen, wenn die App in den Hintergrund tritt (die vom System gewährte Ablaufzeit reicht aus). Ich habe dies wie folgt codiert:Beschleunigung wird nicht aufgerufen, wenn der Beschleunigungssensor in beginBackgroundTaskWithExpirationHandler initialisiert wird?
- (void)applicationDidEnterBackground:(UIApplication *)application {
UIDevice* device = [UIDevice currentDevice];
BOOL backgroundSupported = NO;
if ([device respondsToSelector:@selector(isMultitaskingSupported)])
backgroundSupported = device.multitaskingSupported;
if (backgroundSupported) {
UIApplication* app = [UIApplication sharedApplication];
bgTask = [app beginBackgroundTaskWithExpirationHandler:^{
[app endBackgroundTask:bgTask];
bgTask = UIBackgroundTaskInvalid;
}];
// Start the long-running task and return immediately.
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0),
^{
// Do the work associated with the task.
if ([application backgroundTimeRemaining] > 1.0) {
UIAccelerometer *accel = [UIAccelerometer sharedAccelerometer];
accel.delegate = self;
accel.updateInterval = kUpdateInterval;
}
});
In den Delegierten ich wie erwähnt:
- (void) accelerometer:(UIAccelerometer *)accelerometer
didAccelerate:(UIAcceleration *)acceleration {
if (acceleration.x > kAccelerationThreshold ||
acceleration.y > kAccelerationThreshold ||
acceleration.z > kAccelerationThreshold) {
NSLog(@"Sensed acceleration");
UILocalNotification *localNotif = [[UILocalNotification alloc] init];
Allerdings ist didAccelerate nicht ausgelöst werden, wenn die App Hintergrund tritt, sondern es nach applicationWillEnterForeground aufgerufen wird. Nachdem die App neu gestartet wurde (vom Hintergrund), scheint didAccelerate mehrmals ausgelöst zu werden (möglicherweise die Anzahl, wie oft sich der Beschleunigungsmesser im Hintergrund geändert hat). Die Anfrage scheint angehäuft zu werden und ausgeführt zu werden, wenn die App in den Vordergrund tritt.
Gibt es eine Möglichkeit, den Beschleunigungs-Wert aufzeichnen kann, wenn die App im Hintergrund Zustand ( innen beginBackgroundTaskWithExpirationHandler) ist
Bitte helfen.
Eine Korrektur: Ich habe gerade die Beschleunigungsmesserdaten verifiziert, es scheint nur die Werte nach applicationDidEnterForeground zu erfassen. – CyberKnight