Как отличить блокировку экрана от нажатия кнопки «Домой» на iOS5? - PullRequest
8 голосов
/ 29 ноября 2011

Я разрабатываю приложение для iPhone, которое воспроизводит аудио в фоновом режиме.Я хочу, чтобы звук продолжал воспроизводиться, если пользователь заблокировал экран, но сделайте паузу, если он решит переключиться на другое приложение (нажав кнопку «Домой»).

В iOS 4 проблем не возникало, поскольку приложение работалов неактивное состояние, когда экран был заблокирован и может быть перемещен в фоновый режим только при нажатии кнопки домой.На iOS 5, когда экран заблокирован, приложение теперь также перемещается в фоновый режим, поэтому кажется, что больше невозможно определить разницу между двумя состояниями.Есть ли решение этой проблемы?

Ответы [ 4 ]

14 голосов
/ 27 марта 2012

Вы можете различить эти два случая, проверив свойство applicationState UIApplication. Для приложения, которое вошло в фоновый режим из-за экрана блокировки, будет установлено значение UIApplicationStateInactive, в противном случае - UIApplicationStateBackground.

- (void)applicationDidEnterBackground:(UIApplication *)application
{
    UIApplicationState state = [application applicationState];
    if (state == UIApplicationStateInactive) {
        NSLog(@"Sent to background by locking screen");
    } else if (state == UIApplicationStateBackground) {
        NSLog(@"Sent to background by home button/switching to other app");
    } 
}
5 голосов
/ 26 сентября 2013

Поиск UIApplicationState при запуске applicationDidEnterBackground работал хорошо.К сожалению, теперь это изменилось.

Когда я компилирую свое приложение с XCode5 для поддержки всех вещей iOS7 (но цель сборки все еще установлена ​​на 5.0), экран блокировки теперь выдает состояние UIApplicationStateBackground, когда раньше я получал UIApplicationStateInactive.

Я спросил об этом у службы поддержки Apple, и они подтвердили, что теперь это будет работать.Таким образом, невозможно определить, нажал ли пользователь кнопку «Домой» или «Блокировка экрана».Это печально, так как у меня был действительно хороший вариант использования для его обнаружения.

PS.Мое приложение, созданное с помощью XCode 4, по-прежнему работает по-старому, даже при запуске на iOS7.

4 голосов
/ 04 ноября 2013

Я нашел лучший способ сделать это.

Различать блокировку экрана и нажатие кнопки «Домой» на iOS7

Это может помочь вам как на iOS5, так и на iOS6 и на устройстве iOS7 :). Но на iOS Simulator это не сработает.

Вы можете получить [[UIApplication sharedApplication] applicationState], чтобы определить, является ли это экраном блокировки или кнопкой возврата домой с помощью UIApplicationStateInactive и UIApplicationStateBackground до iOS7.

Но в iOS7 они стали одним и тем же состоянием UIApplicationStateBackground, и вы можете судить об этом по яркости экрана.

Яркость экрана должна быть равна 0, когда в состоянии блокировки экрана;в противном случае это состояние кнопки «Домой».

Вы можете поместить фрагмент кода в - (void)applicationDidEnterBackground:(UIApplication *)application

- (void)applicationDidEnterBackground:(UIApplication *)application
{
    UIApplicationState state = [[UIApplication sharedApplication] applicationState];
    if (state == UIApplicationStateInactive) {
        NSLog(@"Sent to background by locking screen");
    } else if (state == UIApplicationStateBackground) {
        CGFloat screenBrightness = [[UIScreen mainScreen] brightness];
        NSLog(@"Screen brightness: %f", screenBrightness);
        if (screenBrightness > 0.0) {
            NSLog(@"Sent to background by home button/switching to other app");
        } else {
            NSLog(@"Sent to background by locking screen");
        }
    }
}

1 голос
/ 18 декабря 2011

Есть способ получить такое поведение, но он идет с оговоркой.Вы должны установить режим звукового фона в вашем Info.plist и отключить многозадачность для вашего приложения.

Установите для категории аудио сеанса значение AVAudioSessionCategoryPlayback:

[[AVAudioSession sharedInstance] setCategory: AVAudioSessionCategoryPlayback error: &error];

В вашем файле Info.plist,добавьте ключ «Необходимые фоновые режимы» и добавьте пункт «Приложение воспроизводит аудио».Затем добавьте ключ «Приложение не запускается в фоновом режиме» и установите для него значение «да» enter image description here

Теперь на экране блокировки ваше приложение будет переведено в режим звукового фона (звук продолжает работать) при нажатии кнопки homeКнопка завершит работу вашего приложения (и отключит звук).Когда пользователь возвращается в ваше приложение из другого приложения, оно запускается снова.Поэтому, если ваше приложение не загружается слишком долго, и вы можете вернуться к предыдущему состоянию после перезапуска, это может быть жизнеспособным решением.

Я протестировал его с iOS 4.3 и iOS 5.0.1 (включенустройство).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...