IOS5 setBrightness не работал с applicationWillResignActive

Я использую [[UIScreen mainScreen]setBrightness: ] (в SDK 5.0), чтобы изменить фоновый свет системы в моем приложении.

Следующие шаги работают с моим приложением

  1. Активируйте приложение, установите системную яркость по умолчанию, затем сохраните как sysBright.

  2. Измените яркость с помощью моего приложения, измените яркость, затем сохраните как appBright.

  3. Приложение ResignActive с кнопкой «Домой» или кнопкой блокировки, установите яркость на sysBright (значение шага 1, яркость системы по умолчанию).

  4. Снова активное приложение. Затем он повторит вышеуказанные шаги с 1 по 3.

Что-то не так с шагом 3, когда я деактивирую приложение кнопкой блокировки, функция applicationWillResignActive работает хорошо, она может восстановить значение яркости (sysBright).

Но когда я нажимаю кнопку домой, он больше не работает. Яркость по-прежнему имеет значение, которое я изменил в своем приложении. (appBright)

Кто-нибудь знает об этом? Спасибо за любую помощь ~

Вот код:

float appBright,sysBright;

- (void)applicationDidBecomeActive:(UIApplication *)application
{
    sysBright = [[UIScreen mainScreen] brightness];
    [[NSUserDefaults standardUserDefaults] setFloat:sysBright forKey:@"sysBright"];

    [[UIScreen mainScreen] setBrightness:appBright];
}

//doesn't work when i ResignActive with the home button
- (void)applicationWillResignActive:(UIApplication *)application
{        
    [[NSUserDefaults standardUserDefaults] floatForKey:@"sysBright"];
    [[UIScreen mainScreen] setBrightness:sysBright];        
}

person phnessu4    schedule 26.11.2011    source источник
comment
Что вы имеете в виду под кнопкой выхода? Красный минус в переключателе задач или кнопка домой?   -  person conradev    schedule 27.11.2011
comment
извините за это, это кнопка домой, я уже изменил содержание сообщения   -  person phnessu4    schedule 27.11.2011
comment
привет, ты нашел обходной путь? Я тоже на этом застрял...   -  person cpprulez    schedule 04.01.2012
comment
Вы не можете сделать это, я пытался некоторое время назад. Ознакомьтесь с моим вопросом много лет назад для предложений - stackoverflow.com/questions/8316358/   -  person Adam Waite    schedule 12.04.2012
comment
CGFloat sysBright = [[NSUserDefaults standardUserDefaults] floatForKey:@sysBright] [[UIScreen mainScreen] setBrightness:sysBright]; это одно исправление в вашем коде. Но я не думаю, что это сработает, потому что Apple этого не допустит.   -  person Shrikant Phadke    schedule 16.09.2020


Ответы (4)


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

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

Не тратьте свое время, просто отправьте отчет об ошибке в Apple (у меня все получилось).

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

person Tibidabo    schedule 22.04.2012

Попробуй это...

- (void)applicationWillResignActive:(UIApplication *)application
{        
    CGFloat brightness = [[NSUserDefaults standardUserDefaults] floatForKey:@"sysBright"];
    [[UIScreen mainScreen] setBrightness:brightness];        
}
person Andreas Grauel    schedule 20.12.2011
comment
Разве вы не будете использовать частный API, если таким образом получите яркость? Почему бы не использовать CGFloat initialScreenBrightness = [UIScreen mainScreen].brightness; - person Fernando Cervantes; 17.06.2012

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

Пример: сейчас я работаю над подводным приложением (по научным соображениям оно делает фотографии на iPhone в водонепроницаемом чехле), и у нас нет доступа ко всему экрану устройства.

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

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

Решение, которое мы внедрили:

а) Мы предлагаем пользователю отключить автояркость в настройках и отключить функцию автоматической блокировки.

б) Мы устанавливаем яркость на 100% в классе ApplicationDelegate:

- (void)applicationDidBecomeActive:(UIApplication *)application
{
    // Adjust Brightness to full
    [[UIScreen mainScreen] setBrightness:1.0];
}

c) Мы выполняем следующий код, касаясь кнопки приложения, чтобы убедиться, что приложение переходит в фоновый режим (не потребляя циклы ЦП), а яркость снижается до возможного более низкого уровня (экономия заряда батареи):

[[UIScreen mainScreen] setBrightness:0.0]; // Set to low brightness
[[UIApplication sharedApplication] performSelector:@selector(suspend)]; // Simulate Home button

Я надеюсь, что это может быть полезно для кого-то.

PS: Руководства по интерфейсу Apple Human — это одно, а реальные потребности реального приложения — другое (вы не можете ничего предсказать или ограничить заранее).

person Fivos Vilanakis    schedule 12.03.2014

Согласно на форуме Apple DevForum, кажется, что это ошибка, которую Apple неохота исправлять.

person ehrpaulhardt    schedule 07.05.2014