Подтвердить что ты не робот

ApplicationWillResignActive и setBrightness не работают?

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

Следующие действия выполняются с моим приложением:

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

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

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

  • Активное приложение снова. Затем он повторит описанные выше шаги с 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];        
}

Мне что-то не хватает?

4b9b3361

Ответ 1

Я ответил на аналогичный вопрос: IOS5 setBrightness не работает с applicationWillResignActive

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

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

Не тратьте свое время только на файл с сообщением об ошибке в Apple (я сделал хорошо).

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

UPDATE: Мой отчет об ошибке был закрыт, потому что, по словам Apple, это не ошибка. Это странно.

Ответ 2

Поскольку текущие методы не работают в методах делегата приложения, вы можете использовать UIView, как описано Адамом.

Сделайте UIView lvar в файле делегата h:

UIView *view_;

Тогда в реализации:

// create view in app delegate didFinishLaunchingWithOptions method and add it to the window
view_ = [[UIView alloc] initWithFrame:self.window.frame]; // delegate lvar
[view_ setBackgroundColor:[UIColor blackColor]];
[view_ setAlpha:0.5];
[self.window addSubview:view_];
[self.window makeKeyAndVisible];
return YES;

При необходимости просмотрите размер экрана или контроллера. и убедитесь, что он поверх всех других объектов.

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

Ответ 3

Пробовали ли вы регистрировать свой главный контроллер вида (или какой-либо другой объект для него) для UIApplicationWillResignActiveNotification, который отправляется после выполнения applicationWillResignActive?

Это даст вам возможность изменить яркость вне applicationWillResignActive. Не знаю, имеет ли этот метод какую-либо разницу, но попробовать это должно быть легко.

Просто позвоните:

[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(appWillResign) name:UIApplicationWillResignActiveNotification object:nil];

затем определите:

- (void)appWillResign {
    [[NSUserDefaults standardUserDefaults] floatForKey:@"sysBright"];
    [[UIScreen mainScreen] setBrightness:sysBright];        
}

Ответ 4

При нажатии кнопки "домой" ваше приложение не уходит в отставку, а переходит в "Фоновый режим" и имеет свой собственный метод делегирования, который вам необходимо определить:

- (void)applicationDidEnterBackground:(UIApplication *)application

Что-то вроде этого (в дополнение к методу делегата applicationDidBecomeActive:) должно получить предполагаемое поведение:

- (void)applicationDidEnterBackground:(UIApplication *)application
{        
    sysBright = [[NSUserDefaults standardUserDefaults] floatForKey:@"sysBright"];
    [[UIScreen mainScreen] setBrightness:sysBright]; 
}

Ответ 5

От второй до последней строки вы не назначили переменную sysBright.

sysBright = [[NSUserDefaults standardUserDefaults] floatForKey:@"sysBright"];
[[UIScreen mainScreen] setBrightness:sysBright];        

Ответ 6

Вы вызвали синхронизацию?

[[NSUserDefaults standardUserDefaults] synchronize];