Urychlují nedostanou volána při inicializaci akcelerometr uvnitř beginBackgroundTaskWithExpirationHandler?

hlasů
0

V mé aplikaci, chci nahrát data z akcelerometru, když aplikace přejde do pozadí (čas vypršení platnosti udělené v rámci systému bude stačit). I kódované to následujícím způsobem:

- (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;
            }          
        });

V delegáta jsem se zmínil, jako jsou:

- (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];

Nicméně didAccelerate nedostane spuštěna, když aplikace přejde do pozadí, ale spíše volána po applicationWillEnterForeground. Poté, co aplikace dostane obnovené (od pozadí), didAccelerate Zdá se dostat padáka vícekrát (případně kolikrát akcelerometr hodnota se změnilo, když v pozadí). Žádost se zdá, aby se hromadí a proveden při aplikaci přichází do popředí.

Je nějaký způsob, jak mohu nahrát hodnotu akcelerometr, když aplikace je v pozadí stavu (uvnitř beginBackgroundTaskWithExpirationHandler)

Prosím pomozte.

Položena 12/12/2010 v 12:55
zdroj uživatelem
V jiných jazycích...                            


1 odpovědí

hlasů
1

Váš kód běží tak, jak je , a pak exit aplikace pokračuje normálně. Jinými slovy, váš kód související akcelerometr není simultánní, a proto nebude blokovat výstupní proces.

Přečíst znovu komentář:

// Start the long-running task and return immediately.

Vaším úkolem není „long-running“ jeden, bohužel.

Odpovězeno 16/12/2010 v 10:47
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more