Dans mon application, je veux enregistrer les données de l'accéléromètre lorsque l'application entre en arrière-plan (le temps d'expiration accordé par le système sera suffisant). J'ai codé cela comme suit:Accélérer ne pas être appelé lorsque l'accéléromètre est initialisé dans beginBackgroundTaskWithExpirationHandler?
- (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;
}
});
Dans le délégué comme je l'ai mentionné:
- (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];
Cependant, didAccelerate ne se déclenche pas lorsque l'application entre fond, plutôt est appelée après applicationWillEnterForeground. Après que l'application soit relancée (de fond), didAccelerate semble être tiré plusieurs fois (probablement, le nombre de fois que la valeur de l'accéléromètre a changé en arrière-plan). La requête semble s'empiler et s'exécuter lorsque l'application arrive au premier plan.
Est-il possible que je peux enregistrer la valeur de l'accéléromètre lorsque l'application est dans l'état d'arrière-plan ( intérieur beginBackgroundTaskWithExpirationHandler)
S'il vous plaît aider.
Une correction: Je viens de vérifier les données de l'accéléromètre, il semble capturer seulement les valeurs après applicationDidEnterForeground. – CyberKnight