2010-04-24 7 views

Odpowiedz

4

Jeśli chcesz mieć idealne rozwiązanie, należy dodać następujące lcode do listy aplikacja. W przeciwnym razie po pierwszym odczycie ustawienie jest buforowane, a jeśli użytkownik przełączy się na ustawienia, dokona zmian i przełączy się ponownie, powinniśmy ponownie przeczytać zapisaną w pamięci wartość. :)

- (void)applicationWillEnterForeground:(UIApplication *)application { 
CFPreferencesAppSynchronize(CFSTR("/var/mobile/Library/Preferences/com.apple.preferences.sounds")); 

Jeśli ktoś mi powie, jak skomentować tę stronę, naprawdę stałbym się bardziej pomocny.

+0

Frustrująco, to nie działa na iOS 6.0.1. Moja aplikacja wydaje się buforować wartość ustawienia wybraną przy pierwszym ładowaniu aplikacji. Jeśli zmienię ustawienie i przełączy się z powrotem na moją aplikację, nie dostosuje się. Jeśli wymuszam zamknięcie aplikacji i zrestartuję, zmiana zostanie podjęta. Mam teraz dylemat: nie dostarczaj w ogóle kluczowych kliknięć na mojej niestandardowej klawiaturze lub żyj z błędem, że ustawienia zmieniają się, gdy moja aplikacja jest zawieszona, zostaną zignorowane. Co jest gorsze? –

+0

Sprawdziłem 6.1.4, moja aplikacja zawsze otrzymuje obie wartości false z 'Boolean keyExistsAndHasValidFormat = false; wartość bool = CFPreferencesGetAppBooleanValue ( CFSTR ("klawiatura"), CFSTR ("/ var/mobile/Library/Preferences/com.apple.preferences.sounds"), & keyExistsAndHasValidFormat); 'Więc mój kod przestał grać kliknięcia dawno temu . Niech tak będzie, jeśli użytkownicy będą narzekać, skieruję ich prosto do Apple. Przegraliśmy walkę. – Hrissan

17

Nie ma udokumentowanego sposobu sprawdzenia tego, ale jest to możliwe. Nie wiem, czy to naprawdę liczy się jako "prywatne API", więc bądź przygotowany na odrzucenie, jeśli użyjesz tej metody.

Ustawienia dźwięku kliknięcia klawiatury są przechowywane we wspólnym preferencji com.apple.preferences.sounds. Więc można spróbować

return CFPreferencesGetAppBooleanValue(
     CFSTR("keyboard"), 
     CFSTR("/var/mobile/Library/Preferences/com.apple.preferences.sounds"), 
     NULL); 

(BTW: faktyczne wezwanie do gry „kliknięcie” dźwięk w UIKit jest [UIHardware _playSystemSound:1104];)

+3

Wywołanie CFPreferencesGetAppBooleanValue działa doskonale, ale oprogramowanie UIHardware nie jest dla mnie rozpoznawane (ani nigdzie w dokumentach). Zamiast tego dodałem framework AudioToolkit i nazwałem "AudioServicesPlaySystemSound (1104)" dla tego samego efektu. –

+0

@ Chris: To dlatego, że UIHardware jest prywatną klasą. – kennytm

Powiązane problemy