2012-02-29 12 views
12

Ho una funzione nella mia app (un'app di metronomo per musicisti) per oscurare lo schermo per risparmiare sulla durata della batteria. Per impostare la luminosità, sto usando:Impossibile ripristinare la luminosità all'uscita dell'applicazione

[UIScreen mainScreen].brightness = 0.1; 

Mi risparmio la luminosità originale su App avvio in viewDidLoad (...) e il risparmio che ai miei predefiniti dall'utente.

Quando si cambia opinioni in sede di applicazione, posso recuperare la brillantezza originale delle opzioni predefinite dell'utente e ripristino con una chiamata:

[UIScreen mainScreen].brightness = originalBrightness; 

Questo funziona bene. Ho messaggi NSLog (...) che mostrano il valore originale, ecc ... quindi il meccanismo funziona.

Il problema riscontrato è come ripristinare la luminosità originale all'uscita dall'applicazione mentre si preme il pulsante Home.

ho aggiunto codice simile agli applicativi metodi delegato Per:

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

Ognuno di essi ha una chiamata di metodo per impostare la luminosità dello schermo come prima nella vista analoga con NSLog (...) s mostra la ha recuperato la luminosità originale ... ed è tutto corretto. Ho anche eseguito il debug in e le chiamate per impostare la luminosità sono state fatte ... ma l'app si chiude e lo schermo del dispositivo è ancora al livello più basso e oscurato.

Infine, se si fa clic sul pulsante "blocco" in alto, quindi premere il pulsante Home per riattivarlo ... la luminosità è corretta.

Il mio sospetto è che qualsiasi azione o evento venga attivato con la mia chiamata per impostare la luminosità quando l'app non sta uscendo, forse a causa di uno stato non valido o simile.

Inoltre, la mia app è impostato per non funzionare in background, ambientato nel info.plist come:

Application does not run in background  YES 

Qualsiasi aiuto sarebbe apprezzato.

Grazie!

+1

Queste API private sono? Non vedo le proprietà mainWindow o mainWindows (typo?) Nella classe UIScreen. Intendi schermo principale? – picciano

+0

Sì, errore di battitura da parte mia. I is is '[UIScreen mainScreen] .brightness = val;' oppure [[UIScreen mainScreen] setBrightness: val]; ' – Cal30

+0

Sono abbastanza sicuro che non ci sia modo di rendere persistente questa impostazione al di fuori della tua app. La documentazione di Apple non lo dice esplicitamente, ma ho visto altre due app che cambiano la luminosità, in questo caso. Qualcuno [qui] (http: // StackOverflow.it/a/7901339/76810) concorda. – SSteve

risposta

1

iOS consente a quell'app un po 'di tempo prima di uscire. Potresti provare un sleep per una frazione di secondo dopo aver impostato la luminosità.

+0

@piccano l'ho provato dopo aver postato qui, ma nel delegato senza risultati. Ho provato: [code] sleep() [/ code] così come [code] [Thread sleepForTimeInterval:] [/ code] ma nessuna modifica. – Cal30

0

Se si legge attentamente https://devforums.apple.com/thread/139813, i cambiamenti di luminosità non sono permanenti. La luminosità dell'utente originale è tornata, quando si preme il pulsante di blocco e lo si sblocca nuovamente. In realtà, dovevo ripristinare la luminosità della mia app se l'utente ha premuto il pulsante di blocco mentre la mia app è in esecuzione:

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

Non ho avuto molta gioia con questo. La soluzione alternativa era di ripristinare la luminosità su ViewController viewWillDisappear. Non è una grande soluzione, ma l'unica che ho trovato finora ha funzionato (questo è stato rotto per anni ...)

Problemi correlati