Предупреждение кнопки Home iOS, возможно ли это? - PullRequest
5 голосов
/ 18 августа 2011

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

Ответы [ 8 ]

16 голосов
/ 18 августа 2011

Нет, вы не можете сделать это - приложение не имеет права голоса в этом. Спросите своего босса, видел ли он хоть один пример приложения для iOS, которое бы это делало. Нет ... я бы не поспорил.

Приложение может продолжать выполнять некоторые функции в фоновом режиме - потоковую передачу музыки, например, получение информации о местоположении, но ни одно приложение не может заблокировать кнопку «Домой». Если бы вы могли это сделать, вы могли бы запретить закрытие приложения.

A) Вы не могли технически сделать это и

B) Apple не разрешит выпустить его в App Store, если вы выбрали такой путь распространения

Если вы посмотрите на заглушки методов, созданные XCode при создании делегата приложения

-(void)applicationWillResignActive:(UIApplication *)application

-(void)applicationWillTerminate:(UIApplication *)application

Заполнены будут комментарии о том, как вы можете использовать этот метод для приостановки задач, отключения таймеров, снижения частоты кадров, сохранения данных - ничего о возможности отложить, запросить пользователя Сообщение "Вы уверены"?

Вся эта идея противоречит пользовательскому опыту iPhone / Pad / Pod-Touch.

Из руководства App Store (немного сокращенно):

Приложения, которые изменяют поведение переключателей на устройстве, будут отвергнуто

Предлагаемое изменение поведения кнопки «Домой» - поэтому будет отклонено.

2 голосов
/ 18 августа 2011

Уже ответили многие другие, но нет, вы не можете этого сделать. Когда пользователь нажимает кнопку «Домой», вызывается applicationWillResignActive участника вашего приложения, который отключает сенсорные события для приложения. Затем вызывается applicationDidEnterBackground, который согласно Apple Docs :

applicationDidEnterBackground вашего делегата: метод имеет примерно 5 секунд, чтобы закончить любые задачи и вернуться. На практике, этот метод должен возвращаться как можно быстрее. Если метод делает не возвращается до истечения времени, ваше приложение будет убито и очищено из памяти

2 голосов
/ 18 августа 2011

Это возможно на сломанном устройстве с использованием неподтвержденных API. Концепция заключается в многочисленных нарушениях политики использования Apple, поэтому вы никогда и никогда не получите приложение, пытающееся реализовать это каким-либо образом в официальном магазине приложений. Вот только несколько причин:

  1. Вы не можете изменять функциональность любых кнопок (включая кнопки регулировки громкости, некоторые приложения камеры, которые использовали их для съемки, но в результате они были загружены из магазина).
  2. Вы не можете мешать стандартному взаимодействию пользователя с устройством. Кнопка «Домой» возвращает людей домой, вы не можете предотвратить это или запросить подтверждение, так как это может помешать взаимодействию.
  3. Нет общедоступного API для определения фактического использования кнопки home. Таким образом, вам потребуется частный API, и вы не можете использовать частные API без явного разрешения Apple, которое они никогда не дадут из-за № 1 и № 2 выше.

Я уверен, что есть много других причин, но, тем не менее, это будет прямым нарушением политик магазина приложений, а также рекомендаций по интерфейсу пользователя iOS.

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

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

1 голос
/ 30 августа 2013

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

Но недавно я столкнулся с проблемой, которая возникла у Самссонарта.

Ответ, данный @iandotkelly, устарел в iOS5.Теперь ни один из методов делегата не будет использоваться для различения блокировки устройства или отправки приложения в фоновый режим с помощью кнопки «Домой».

Теперь вы можете использовать переменную applicationState, чтобы определить, какое действие инициируется.

applicationState isвстроенный идентификатор, предоставленный appDelegate.

**

if it returns 2 then, it will identify the Home button is pressed
if it returns 1 then, it will identify the lock hardware button is pressed

**

Итак, в вашем случае вы можете проверить это условие в **applicationDidEnterBackground** метод

- (void)applicationDidEnterBackground:(UIApplication *)application
{
    NSLog(@"decision >> %d",[[UIApplication sharedApplication] applicationState]);
}

Наслаждайтесь программированием!

1 голос
/ 25 марта 2012

Возможно, вы захотите заглянуть в демонстрационный режим магазина IOS.Таким образом, вы можете отключить кнопку «Домой» и заблокировать устройство в первом приложении, которое вы запускаете после загрузки.

1 голос
/ 18 августа 2011

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

Руководство по интерфейсу пользователя Apple

Это должно быть всем доказательством, которое вам нужно. Но, чтобы быть ясным, Apple не позволит приложению каким-либо образом переопределить кнопку «Домой». Вы можете, конечно, поставить листы действий или всплывающие окна с предупреждением перед выходом из системы, но как только вы нажмете кнопку «Домой», вы получите уведомление о том, что хотите освободить память, и вас отключат.

0 голосов
/ 12 мая 2014

Я знаю, что это старая тема, но я просто хочу обновить этот ответ.В iOS 7 это не работает.Поэтому я использую яркость экрана, когда приложение переходит в фоновый режим, чтобы определить разницу между кнопкой «Домой» и кнопкой «Блокировка».

-(void)applicationDidEnterBackground:(UIApplication *)application { if ([[UIApplication sharedApplication] applicationState] == UIApplicationStateInactive) { NSLog(@"Sleep button pressed"); } else if ([[UIApplication sharedApplication] applicationState] == UIApplicationStateBackground) { if ([[UIScreen mainScreen] brightness] > 0.0) NSLog(@"Home button pressed"); else NSLog(@"Sleep button pressed"); } }

Я надеюсь, что это поможет в будущемлюбой

0 голосов
/ 18 августа 2011

Лучшая ссылка, которую я могу найти, это эта . Это не совсем ясно, но в Руководстве Apple по человеческому интерфейсу есть пара заголовков «Всегда будьте готовы к остановке», за которыми следует «Не совсем программно», в которых объясняется, что делает кнопка «Домой» и что вам не следует реализовывать собственные стратегии выхода.

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