2012-02-29 6 views
12

バッテリ寿命を節約するために、私のアプリ(ミュージシャンのためのメトロノームアプリ)に画面を暗くする機能があります。明るさを設定するには、私が使用しています:アプリケーションの終了時に明るさを復元できません

[UIScreen mainScreen].brightness = 0.1; 

を私はのviewDidLoad(...)で起動アプリの元の明るさを節約し、自分のユーザデフォルトにすることを保存しています。アプリ内のビューを変更する場合

、私はユーザデフォルトから元の明るさを取得し、呼び出しで復元:

[UIScreen mainScreen].brightness = originalBrightness; 

これが正常に動作します。元の値などを示すNSLog(...)メッセージがあります。そのため、メカニズムが機能します。

問題は、ホームボタンを押したときにアプリケーション終了時に元の明るさに戻す方法です。これら各々は、同様のNSLog(...)とビューに前のように画面の明るさを設定するためのメソッド呼び出しを示すsを有する

applicationWillResignActive(...) 
applicationDidEnterBackground(...) 
applicationWillTerminate(...) 

:私は私のアプリケーションのデリゲートメソッドのようなコードを追加した

元の明るさを取得して...それはすべて正しいです。私もデバッグして明るさを設定するための呼び出しが行われている...しかし、アプリが終了し、デバイスの画面はまだ、淡色の低いレベルにあります。

最後に、「ロック」ボタンをクリックしてホームボタンを押すと、目を覚ますと明るさが正しく表示されます。

私の疑念は、アプリケーションが終了しているときに明るさを設定するために呼び出されたアクションやイベントは、状態が無効であるなどの理由で発生している可能性があります。

はまた、私のアプリは、バックグラウンドで実行しないように設定されたInfo.plistファイルに設定されている:任意の助けをいただければ幸いです

Application does not run in background  YES 

ありがとうございます!

+1

これらのプライベートAPIはありますか? UIScreenクラスのmainWindowまたはmainWindows(typo?)のプロパティが表示されません。 mainScreenを意味しますか? – picciano

+0

はい、私の部分に誤植。私は '[UIScreen mainScreen] .brightness = val;'です。または[[UIScreen mainScreen] setBrightness:val]; ' – Cal30

+0

私はこの設定をあなたのアプリの外で永続化させる方法がないと確信しています。 Appleのドキュメンテーションはこれを具体的に言っているわけではありませんが、私は2つの他の明るさが変化するアプリケーションを見てきました。誰か[ここ](http:// stackoverflow。com/a/7901339/76810)が同意しています。 – SSteve

答えて

1

iOSは、終了する前にそのアプリに少し時間を許しています。明るさを設定した後、数分の1秒間sleepを試してみてください。

+0

@piccano私はここに投稿した後にそれを試しましたが、代理人は役に立たなかった。私は試みました:[code] sleep()[/ code] [Thread sleepForTimeInterval:] [/ code]と同様ですが、変更はありません。 – Cal30

0

https://devforums.apple.com/thread/139813をよく読んだ場合、明るさの変化は恒久的ではないことがわかります。ロックボタンを押して再度ロックを解除すると元のユーザーの明るさが戻ってきます。これで

- (void)applicationDidBecomeActive:(UIApplication *)application{ 
    [self setBrightness]; 
} 
0

なかっ多くの喜びを:私のアプリが起動している間、実際に、私は、ユーザーがロックボタンを押した場合は私のアプリの明るさを復元する必要がありました。回避策は、ViewController viewWillDisappearの明るさをリセットすることでした。素晴らしい解決策ではありませんが、これまでに私が見つけた唯一のもの(これは何年も壊れています...)

関連する問題