Как узнать, может ли текущее устройство иметь фоновый режим - PullRequest
2 голосов
/ 03 мая 2011

Я выполняю некоторые задачи после входа в фоновом режиме. Я хочу выполнять эти задачи, только если я нахожусь в фоновом режиме, поэтому я сделал:

if ([[UIApplication sharedApplication] applicationState] == UIApplicationStateBackground)

Но applicationState доступен только в iOS 4.0 и более поздних версиях ...

Интересно, как этот кусок кода будет работать на iOS 3, например.

  • Как узнать, есть ли на устройстве iOS 4?
  • Как избежать сбоев и исключений для iOS <4? </li>

Спасибо за помощь

Kheraud

Ответы [ 2 ]

9 голосов
/ 03 мая 2011

Вы можете проверить, поддерживает ли текущая iOS возврат текущего состояния приложения, с помощью -respondsToSelector:

if ([[UIApplication sharedApplication] respondsToSelector:@selector(applicationState)] ){
  UIApplicationState state = [[UIApplication sharedApplication] applicationState];
}

. Вы можете определить, доступна ли поддержка многозадачности (даже устройства под управлением iOS 4 или новее могут не иметьаппаратное обеспечение для поддержки многозадачности) путем специальной проверки фоновой поддержки:

UIDevice* device = [UIDevice currentDevice];
BOOL backgroundSupported = NO;
if ([device respondsToSelector:@selector(isMultitaskingSupported)])
   backgroundSupported = device.multitaskingSupported;

Вы можете получить версию iOS, используя следующий код (хотя на самом деле вы не должны полагаться на следующий код для получения фоновой поддержки):

float osVersion=[[[UIDevice currentDevice] systemVersion] floatValue];

Наконец, если вы хотите выполнить некоторые задачи сразу после входа в фоновый режим, вам нужно воспользоваться следующим событием:

- (void)applicationDidEnterBackground:(UIApplication *)application

.. но обратите внимание, чтоВаше время будет очень ограничено.У вас будет примерно пять секунд, чтобы сделать то, что вы хотите.В случае, если вам нужно больше, вы можете попробовать запросить у iOS дополнительное время:

- (void)applicationDidEnterBackground:(UIApplication *)application
{
    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.

        [app endBackgroundTask:bgTask];
        bgTask = UIBackgroundTaskInvalid;
    });
}

Обратите внимание, что в этом случае вам может быть предоставлено больше времени для iOS (или нет), но это все еще ограниченная длина

Apple Выполнение кода в фоновом режиме стоит прочитать.

0 голосов
/ 13 мая 2011

Я нашел эту ссылку очень полезной, чтобы понять, как работать с версиями ОС 3.1 и> 4.0:

Разработка приложений для iPhone с iOS4 SDK, Развертывание на устройствах 3.x: Base SDK и iPhone OSЦель развертывания

...